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 считает, что после использования Следуя |