memset
и memcpy
memcpy
Синтаксис:
#include <string.h> void * memcpy ( void * destinationPtr, const void * sourcePtr, size_t num );
Если ваш код использует функцию memcpy
, смотрите информацию в этой таблице.
Спецификация | Пример |
---|---|
Polyspace® осуществляет проверку Invalid use of standard library routine функции. Проверка определяет, больше ли блок памяти, на который указывают sourcePtr или destinationPtr , чем или равен в размере памяти, присвоенной им через num . | #include <string.h>
typedef struct {
char a;
int b;
} S;
void func(int);
void main() {
S s;
int d;
memcpy(&d, &s, sizeof(S));
} В этом коде Polyspace производит красную ошибку Invalid use of standard library routine потому что:
|
Polyspace не проверяет, инициализируется ли память, на которую указывает После использования | #include <string.h> typedef struct { char a; int b; } S; void func(int); void main() { S s, d={'a',1}; int val; val = d.b; // val=1 memcpy(&d, &s, sizeof(S)); val = d.b; // val can have any int value } В этом коде, когда функция |
Polyspace повышает красную проверку Invalid use of standard library routine, если источник и целевые аргументы накладываются. Перекрывающиеся присвоения запрещаются Стандартом C. | Красная проверка производится для этого присвоения памяти: #include <string.h> int main() { char arr[4]; memcpy (arr, arr + 3, sizeof(int)); } |
memset
Синтаксис:
#include <string.h> void * memset ( void * ptr, int value, size_t num );
Если ваш код использует функцию memset
, смотрите информацию в этой таблице.
Спецификация | Пример |
---|---|
Polyspace осуществляет проверку Invalid use of standard library routine функции. Проверка определяет, больше ли блок памяти, на который указывает ptr , чем или равен в размере памяти, присвоенной им через num . | #include <string.h>
typedef struct {
char a;
int b;
} S;
void main() {
int val;
memset(&val,0,sizeof(S));
} В этом коде Polyspace производит красную ошибку Invalid use of standard library routine потому что:
|
Если | #include <string.h> typedef struct { char a; int b; } S; void main() { S s; int val; memset(&s,0,sizeof(S)); val=s.b; //val=0 } В этом коде Polyspace полагает, что, следуя за использованием |
После использования
| #include <string.h> typedef struct { char a; int b; } S; void main() { S s; int val; memset(&s,1,sizeof(S)); val=s.b; // val can have any int value } В этом коде Polyspace полагает, что, следуя за использованием После |