如何使用对INT *指针的免费功能,用C
问题描述:
这是我的代码:如何使用对INT *指针的免费功能,用C
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。 我如何释放它?
谢谢!
答
您扫描的是多了一个数比您分配的空间大
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));
你分配的内存为大小-1数量的整数,但你想读大小一定数量他们
永远不会抛弃'malloc()'的返回! – Rerito