2009-12-15 73 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,這確實是一個問題。