释放malloc 2D矩阵

时间:2014-10-25 12:03:34

标签: c windows

我的程序没有删除数组,总是在释放点停止。我的代码:

#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
int main(){
    int n, m;
    scanf("%d %d", &n, &m);
    int** t;
    t=(int**)malloc(n);
    for(int i=0; i<n; i++){
        t[i]=(int*)malloc(m);
    }
    for (int i=0; i<n; i++){
        for(int j=0; j<m; j++){
            t[i][j] = rand() % 10;
            printf("%d ", t[i][j]);
        }
        printf("\n");
    }
    getch();
    for(int i=1; i<n; i++){
        free (t[0]);
    }
    free (t);
    return 0;
}

1 个答案:

答案 0 :(得分:2)

你试图多次释放第一个元素,而不是只释放一次,包括第一个(i = 0)元素。

for(int i=0;i<n;i++){
    free (t[i]);

你也没有为malloc分配足够的空间:

t = malloc( n * sizeof(int*) ) ;

t[i] = malloc( m * sizeof(int) ) ;

同时检查scanf调用的返回值,因为它可能会失败,并检查n和m的值是否符合所需范围。