我的程序没有删除数组,总是在释放点停止。我的代码:
#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;
}
答案 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的值是否符合所需范围。