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的列,其中有数字&gt; 0
此时我得到“浮点异常”,如何解决这个问题? 抱歉我的英语不好......
答案 0 :(得分:5)
在头文件中包含函数/变量 definitions 是一个非常糟糕的主意,就像你所做的那样。将定义放在C文件中,并在头文件中声明要使用的其他C文件。
您的浮点错误位于sudoku.h
的第66行,而不是您认为的位置。
number = rand()%m;
由于此处m
为零,因此除以它会导致错误。
我没有详细查看整个代码。
答案 1 :(得分:1)
@Alok当然告诉你错误是什么(并指出你的.h文件存在问题),但我想告诉你如何自己找到它。
gcc -g sudoku.c -o sudoku
gdb sudoku
启动调试器。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,这确实是一个问题。