memset и memcpymemcpyСинтаксис:
#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 полагает, что, следуя за использованием После |