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

プログラムは、最後の行 (無料関数) まで完全に実行されます。それに到達すると、「HEAP CORRUPTION DETECTED」のような大きなエラーウィンドウが表示されます。

フリー関数は void ポインターを取得する必要があることは知っていますが、私のものは int です。どうすれば解放できますか?

ありがとう!

4

2 に答える 2

5

割り当てられたスペースよりも 1 つ多くスキャンしています

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

size-1個の整数にメモリを割り当てましたが、size個の整数を読み取りたいとします。

于 2013-04-16T13:08:43.620 に答える