-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 に答える