0

メモリリークを防ぐためにmallocコマンドの後でメモリを解放しようとすると、実行時にヒープ破損の問題が発生します。私のデバッグは、ヒープバッファの終わりに達した後、アプリケーションがメモリに書き込もうとしていることを示しています。これが私の問題を切り分けるために私が単純化したものです。

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

main(){

int i,j,n;
int temp[4];
int **a;

printf("Amount of intervals to be entered: ");
scanf("%d", &n);

//allocate memory for a 2d array of size (n x 4)
a = (int**) malloc(n*sizeof(int*));
for (i=0;i<4;i++){
    a[i] = (int*) malloc(4*sizeof(int));
}

if (!a){
    printf("malloc failed %d\n",__LINE__);
    exit(0);
}

printf("Please enter the intervals a line at a time followed by a return: \n");
for(i=0;i<n;i++){
    scanf("%d %d %d %d",&a[i][0], &a[i][1], &a[i][2], &a[i][3]);
}

for(i=0;i<n;i++){

    printf("%d, %d, %d, %d\n", a[i][0], a[i][1], a[i][2], a[i][3]);

}


// free up the allocated memory 


for (i=0;i<n;i++){
    free(a[i]);
}

free(a);




}

私はメモリの割り当てと割り当て解除にあまり精通していないので、何をすべきか迷っています。

4

2 に答える 2

3

他の問題があるかもしれません。しかし、これは少なくとも間違っています:

a = (int**) malloc(n*sizeof(int*));
for (i=0;i<4;i++){                   <---- 4 should be n
    a[i] = (int*) malloc(4*sizeof(int));
}
于 2012-06-27T03:54:30.507 に答える
0
//allocate memory for a 2d array of size (n x 4)
a = (int**) malloc(n*sizeof(int*));

if (!a){
    printf("malloc failed %d\n",__LINE__);
    exit(0);
}

for (i=0;i<n;i++){
    a[i] = (int*) malloc(4*sizeof(int));
}

-呼び出し後、「a」を使用する前に、mallocチェックを移動します

-「n」を使用します

-「math.h」、「temp」、「j」を削除します

于 2012-06-28T09:32:44.547 に答える