int数组上的浮点异常 - C

时间:2009-12-15 15:31:17

标签: c arrays floating-point-exceptions

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

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

2 个答案:

答案 0 :(得分:5)

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

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

number = rand()%m;

由于此处m为零,因此除以它会导致错误。

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

答案 1 :(得分:1)

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

  1. 首先,您希望使用调试进行构建。我跑了:gcc -g sudoku.c -o sudoku
  2. 其次,我运行它并确认它确实因浮点异常而崩溃。
  3. 我跑gdb sudoku启动调试器。
  4. 我打了'run',不久之后:
  5. 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,这确实是一个问题。