-1
int check_row;
    for (n=0; n<9; n++) {
 used_numbers[n] = n+1;
}
for (row=0; row<3; row++) {
    for (check_row=0; check_row<3; check_row++) {
        used_numbers[(sudoku[row][check_row]-1)] = 0;
    }
...

int sudoku[9][9] 声明为全局变量, used_numbers[9] 为 int。在数独矩阵中,行从 0 到 2,每行从 0 到 2,其中有数字 > 0

此时我得到“浮点异常”,如何解决这个问题?对不起,我的英语不好...

4

2 回答 2

5

就像您所做的那样,在头文件中定义函数/变量是一个非常糟糕的主意。将定义放在 C 文件中,将声明放在头文件中以供其他 C 文件使用。

您的浮点错误位于第 66 行sudoku.h,而不是您认为的位置。

number = rand()%m;

由于m这里为零,除以它会导致错误。

我还没有详细查看整个代码。

于 2009-12-15T16:10:39.253 回答
1

@Alok 当然已经告诉你错误是什么(并指出了你的 .h 文件的问题),但我想告诉你如何自己找到它。

  1. 首先,您想通过调试进行构建。我跑了:gcc -g sudoku.c -o sudoku
  2. 其次,我运行它并确认它确实因Floating point exception而崩溃。
  3. 我跑去gdb sudoku启动调试器。
  4. 我输入了“运行”,然后不久:

GDB 输出:

(gdb) run
Starting program: /tmp/t/sudoku 

Program received signal SIGFPE, Arithmetic exception.
0x000000000040098f in sudoku_init () at sudoku.h:66
66                              number = rand()%m;

所以,我们有它所在的行号。l可以打印使用更多上下文。使用p m我们可以看到m==0,这确实是个问题。

于 2010-12-13T19:29:37.977 回答