memcpy()

使用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); }

【memcpy()】

    推荐阅读