Tim*_*tei 2 c arrays pointers multidimensional-array
我有下一个我想读取2D数组的代码.它会这样做,但在程序结束后,程序每次都会崩溃.我有一个更大的计划,但这是唯一的问题.我还阅读了正确分配多维数组并调试了程序.
问题是:为什么程序在最后崩溃,即使它在整个预期的操作程序中运行正常?
void dynamicMemAlloc(int n, int (**arrayPointer)[n][n]){
*arrayPointer = malloc(sizeof(int[n][n]));
assert(*arrayPointer != NULL);
}
void readMy2Darray(int n, int array[n][n]){
int i, j;
for(i = 1; i <= n; i++)
for(j = 1; j <= n; j++)
scanf("%d", &array[i][j]);
}
void printMy2Darray(int n, int array[n][n]){
int i, j;
for(i = 1; i <= n; i++){
for(j = 1; j <= n; j++)
printf("%d ", array[i][j]);
printf("\n");
}
}
int main(void){
int n;
printf("Read the dimension(n): ");
scanf("%d", &n);
int (*arrayPointer)[n][n];
dynamicMemAlloc(n, &arrayPointer);
printf("Read the 2D array:\n");
readMy2Darray(n, *arrayPointer);
printf("Printed array:\n");
printMy2Darray(n, *arrayPointer);
free(arrayPointer);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
在你的代码中
for(i = 1; i <= n; i++)
for(j = 1; j <= n; j++)
Run Code Online (Sandbox Code Playgroud)
一个人走了.C数组是基于0的索引.您应该将循环条件设置为
for(i = 0; i < n; i++)
for(j = 0; j < n; j++)
Run Code Online (Sandbox Code Playgroud)
否则,它会导致未定义的行为.