1

这是我的代码:

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);

该程序运行完美,直到最后一行 - 自由功能。当它到达它时,我会收到一个巨大的错误窗口,例如“检测到堆损坏”。

我知道自由函数应该得到一个 void 指针,但我的是 int。我怎样才能释放它?

谢谢!

4

2 回答 2

5

您正在扫描的数字比您分配的空间多一个

p1 =(int*)malloc(sizeof(int)*(size-1));         
for (i=0;i<size;i++)

这会导致损坏,malloc size * sizeof *p1字节。

调用free是正确的。

于 2013-04-16T13:08:55.160 回答
2
p1 =(int*)malloc(sizeof(int)*(size-1));  

应该

p1 =(int*)malloc(sizeof(int)*(size));  

您为大小为 1的整数分配了内存,但您想读取它们的大小

于 2013-04-16T13:08:43.620 回答