0

在使用memcpy和释放内存时,free会出现堆损坏。我不明白为什么。

char *buff = malloc(20);
memset(buff,NULL,20);
strcpy(buff,"xvxvxvxxvx");
char*time =  malloc(20));
memset(time,NULL,20);//memcpy use
memcpy(time,buff,20);
free(time);//crashing here
return 0;
4

2 回答 2

5

sizeof(20)是 的大小int。您可能打算malloc(20)使用 20 个字符。

于 2013-04-11T06:29:19.887 回答
0

memset 的第二个参数需要 int 但正在接收 NULL。

void *memset(void *s, int c, size_t n);

memset() 函数用常量字节 c 填充 s 指向的内存区域的前 n 个字节。

所以你可以使用 memset 作为 memset(buff,0,20); 现在程序不会崩溃。

于 2013-04-11T09:11:55.733 回答