c - 为什么我的程序执行完了所有的操作,最后还是崩溃了?

标签 c arrays pointers multidimensional-array

我有下一个代码,我想读取一个二维数组。它这样做,但在程序结束后,程序每次都会崩溃。我有一个更大的程序,但这是唯一的问题。我也读过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;
}

The error here

最佳答案

在你的代码中

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/

相关文章:

c++派生类更改基类指针

c - 即使整个代码没有划分,hackerrank 也会出现运行时错误

c - C 中多维数组的问题

指向指针的指针数组 二维数组

pointers - 请解释 &, 和 * 指针

C++11: move 操作会改变地址吗?

c++ - GCC中__attribute__((unused))和__attribute((unused))的区别

c - 在 MikroC 上将存储体数量设置为 8

c# - 将结构编码到非托管数组

javascript - 从数组创建 div