这是我的代码:
int size;
int *p1;
scanf("%d",&size);
p1 =(int*)malloc(sizeof(int)*(size-1));
for (i=0;i<size;i++)
scanf("%d",&p1[i]);
free(p1);
程序完美运行直到最后一行——free函数。当它到达它,我得到一个巨大的错误窗口类似"堆腐败检测"。
我知道自由函数应该得到一个void指针,但我的是int。我怎样才能解放它?
谢谢!
您正在扫描的数字比已分配给
的空间多一个p1 =(int*)malloc(sizeof(int)*(size-1));
for (i=0;i<size;i++)
导致损坏,malloc
size * sizeof *p1
字节。
呼叫free
正确
p1 =(int*)malloc(sizeof(int)*(size-1));
应为
p1 =(int*)malloc(sizeof(int)*(size));
您为size-1 number的整数分配了内存,但是您想读取size number of them