如何使用对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。 我如何释放它?

谢谢!

+0

永远不会抛弃'malloc()'的返回! – Rerito

您扫描的是多了一个数比您分配的空间大

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

导致腐败,mallocsize * sizeof *p1字节。

free的呼叫是正确的。

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

应该

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

你分配的内存为大小-1数量的整数,但你想读大小一定数量他们