我有下一个代码,我想读取一个二维数组。它这样做,但在程序结束后,程序每次都会崩溃。我有一个更大的程序,但这是唯一的问题。我也读过Correctly allocating multi-dimensional arrays我调试了程序。
问题是:为什么程序在整个预期的运行过程中都运行良好,但最后还是崩溃了?
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;
}
最佳答案
在你的代码中
for(i = 1; i <= n; i++)
for(j = 1; j <= n; j++)
减一。 C 数组是从 0 开始索引的。您应该将循环条件设置为
for(i = 0; i < n; i++)
for(j = 0; j < n; j++)
否则会导致undefined behavior .
关于c - 为什么我的程序执行完了所有的操作,最后还是崩溃了?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43998413/