2009-12-15 47 views
-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和col从0到2为每行,已在其中,数字> 0int数组上的浮点异常 - C

在这一点上,我得到“浮点异常”,如何解决这个问题? 对不起我的英文不好...

+0

请显示实际的代码。 – 2009-12-15 15:32:56

+1

您是否尝试过使用调试器? – Tom 2009-12-15 15:33:53

+0

您不能在该代码中获得浮点异常,但看起来没有任何浮点值。发布更多代码并包含包含错误的部分(在错误中查找行号)。发布错误以及。 – KernelJ 2009-12-15 15:36:32

回答

5

这是一个非常糟糕的主意,有函数/变量定义在头文件中,就像你做的事。将定义放在C文件中,并将声明放在头文件中供其他C文件使用。

你的浮点运算错误,是对sudoku.h线66,不是你认为它是。

number = rand()%m; 

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

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

+0

是的,我已经解决了,谢谢你的答案.. :) – genesisxyz 2009-12-15 16:21:40

1

@Alok具有当然跟你说的是什么错误(并指出您的.h文件中的问题),但我想告诉你如何可以自己找到它。

  1. 首先,要建立与调试。我跑:gcc -g sudoku.c -o sudoku
  2. 其次,我跑了它,并证实它确实与浮点异常崩溃。我运行gdb sudoku来启动调试器。
  3. 我打 '跑',不久之后:

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,这确实是一个问题。