【发布时间】:2015-10-15 01:09:09
【问题描述】:
我制作了一个创建二维数组的程序。 下面的代码在visual studio和turbo c上运行良好:
#include<stdio.h>
#include<stdlib.h>
int **allocarr(int **arr, int row, int col){
int i;
arr=calloc(row, sizeof(int));
for(i=0; i<row; i++){
arr[i]=calloc(col, sizeof(int));
}
return arr;
}
void freearr(int **arr, int row, int col){
int i;
for(i=0; i<row; i++) free(arr[i]);
free(arr);
}
void printarr(int **arr, int row, int col){
int i, j;
for(i=0; i<row; i++){
for(j=0;j<col;j++){
printf("\t%d", arr[i][j]);
}
printf("\n\n");
}
}
int main(){
int **arr=NULL;
arr=allocarr(arr, 3, 3);
arr[2][2]=8;
printarr(arr, 3, 3);
freearr(arr,3, 3);
return 0;
}
但它不适用于 mac os x gcc 和 mingw gcc。
一切编译正常,没有任何警告和错误(-Wall & -Wextra),
但它在运行时崩溃......
在 gdb 和 lldb 中,它表示 free() 正在释放未分配的内存。
分配指针数组后,当我分配内存后,正好有 2 个内存块(这是正确的词吗?)将具有无法初始化的随机值。
在将另一个数组分配给指针数组之前,我尝试分配它。 它打印得很好(没有 2 个随机值),但在为其分配值时仍会偶尔崩溃。 为什么会这样?
【问题讨论】: