2013-04-16 25 views
1

這是我的代碼:如何使用對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

回答

5

您掃描的是多了一個數比您分配的空間大

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

導致腐敗,mallocsize * sizeof *p1字節。

free的呼叫是正確的。

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

應該

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

你分配的內存爲大小-1數量的整數,但你想讀大小一定數量他們