C-分割故障访问2D数组



我有一个2D数组,代表这样定义的sudoku网格:

int** sudoku = (int**)malloc(sizeof(int*) * 9);
for(i = 0; i < 9; i++)
    sudoku[i] = (int*)malloc(sizeof(int) * 9);

我已经通过一个迭代的函数运行,该函数可以通过每个元素和打印,该元素正常运行(显示81个零(。但是,然后,我将其交给另一个功能,该功能将文件从文件读取到此数组中。这就是它的样子(我正在使用一堆printf语句来调试(。

void readSudokuFile(char* filename, int*** grid) {
    FILE* file;
    int i, j, curr;
    file = fopen(filename, "r");
    for(i = 0; i < 9; i++) {
        for(j = 0; j < 9; j++) {
            fscanf(file, "%d", &curr);
            *grid[i][j] = curr;
        }
    }
    fclose(file);
}

当功能运行时,它似乎读取了第一行的读取,但是当它到达第二行并试图将值插入Sudoku [1] [0]时,我会得到SEG故障。这就是我的printfs的输出的样子:

Reading line 0...
    Reading col 0... got 6
    Reading col 1... got 2
    Reading col 2... got 4
    Reading col 3... got 5
    Reading col 4... got 3
    Reading col 5... got 9
    Reading col 6... got 1
    Reading col 7... got 8
    Reading col 8... got 7
Reading line 1...
    Reading col 0... got 5
Segmentation fault(core dumped)

这是我要阅读的文件:

6 2 4 5 3 9 1 8 7
5 1 9 7 2 8 6 3 4
8 3 7 6 1 4 2 9 5
1 4 3 8 6 5 7 2 9
9 5 8 2 4 7 3 6 1
7 6 2 3 9 1 4 5 8
3 7 1 9 5 6 8 4 2
4 9 6 1 8 2 5 7 3
2 8 5 4 7 3 9 1 6

我正在使用-Wall和-petsathist的GCC编译,并且没有任何编译器警告。

我已经搜索了几个小时,但无济于事,我不确定这里出了什么问题。任何帮助将不胜感激。

为了避免遇到的指针错误,我建议简化您的动态2D阵列分配 ->

int (*array) [Y] = malloc(sizeof(int[X][Y]));

这样访问您的数组 ->

int g=array[0][0];

和这样的设置 ->

array[0][0]=0;

这将大大简化您的解决方案,并且您还将获得一个连续的内存块,其中包含2D阵列作为奖励。如果您不一定必须这样做,这也将简化编写和读取文件,因为您不需要遍历每个元素。

/a

尝试像这样修改您的功能:

        void readSudokuFile(char* filename, int** grid) {
   // ...
                grid[i][j] = curr;
    }

并这样调用:

readSudokuFile(filename, sudoku)

相关内容

  • 没有找到相关文章

最新更新