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)のサイズですintmalloc(20)おそらく20文字を意図していたでしょう。

于 2013-04-11T06:29:19.887 に答える
0

memset の 2 番目の引数は int を想定していますが、NULL を受け取っています。

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

memset() 関数は、s が指すメモリー域の最初の n バイトを定数バイト c で埋めます。

したがって、memset を memset(buff,0,20); として使用できます。これで、プログラムはクラッシュしなくなりました。

于 2013-04-11T09:11:55.733 に答える