为什么我的程序在最后崩溃,即使它执行所有操作就好了?

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)

这里的错误

Sou*_*osh 6

在你的代码中

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)

否则,它会导致未定义的行为.

  • @Timʘɫei阅读[未定义的行为](https://en.wikipedia.org/wiki/Undefined_behavior). (6认同)