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