0
我已经创建了一个创建2d数组的程序。下面 代码工作以及在Visual Studio中&的Turbo C:使用双指针创建2d数组
#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个随机值),但在分配值时仍会偶尔崩溃。 为什么会发生这种情况?
我知道。但它仍然不会改变它不工作的事实。 – hoholee12
@ hoholee12它在我身边正常工作,没有泄漏检测 – vsoftco
@PC Luddite的例子请。我在哪里可以在代码中找到UB? – hoholee12