使用memcpy()函数出现如下错误:
int main()
{
int *chunk = (int *)malloc(10*sizeof(int));
//chunk[5] = 20;
for(int i = 0;i<10;i++)
{
chunk[i] = i;
}
memcpy(chunk ,0 , 10*sizeof(int));
printf("chunk 9 is%d\n",chunk[5]);
free(chunk);
}
warning: null argument where non-null required (argument 2) [-Wnonnull]
memcpy(chunk ,0x00 ,9*sizeof(int));
这句话是个编译警告,意思是说把空自变量(null argument),即0,赋值给了标明属性为非零指针的参数。这个问题是由于参数不匹配引起的
例如memcpy (void *dest, const void *src, size_t len)函数,其第1和第2个参数即为非零指针。如果将0值写入该参数后,就会引起该警告。
解决方法为:
可以将0值赋给一个变量,然后将该变量的指针赋给该参数即可。
int main()
{
int *chunk = (int *)malloc(10*sizeof(int));
//chunk[5] = 20;
for(int i = 0;i<10;i++)
{
chunk[i] = i;
}
int a = 0;
memcpy(chunk ,&a , 10*sizeof(int));
printf("chunk 9 is%d\n",chunk[5]);
free(chunk);
}