【发布时间】:2017-05-16 10:05:40
【问题描述】:
我有下一个要读取二维数组的代码。它会这样做,但在程序结束后,程序每次都会崩溃。我有一个更大的程序,但这是唯一的问题。我还阅读了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;
}
【问题讨论】:
-
Why does my program crash even if it works fine?...这是什么声明? -
您尝试释放未从堆中分配的内存。您应该阅读 c 中的内存管理是如何工作的。
-
我不知道该怎么说我想说的话
-
程序崩溃时怎么可能正常工作?
-
这很容易做到——我已经做了很多。只需破坏堆栈上的 main() 返回地址。结果 - main() 返回时的“正确”操作和段错误。
标签: c arrays pointers multidimensional-array