在C中释放分配的内存时堆积损坏

时间:2012-06-27 03:50:23

标签: c memory memory-management memory-leaks

为了在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);




}

我对分配和取消分配内存并不是非常熟悉,所以我不知道应该做些什么。

2 个答案:

答案 0 :(得分:3)

可能还有其他问题。但这至少是错误的:

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

答案 1 :(得分: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”