2009-12-15 4 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. В матрице sudoku для строки от 0 до 2 и col от 0 до 2 для каждой строки есть в ней цифры> 0Исключение с плавающей запятой в массиве int - C

На данный момент я получаю «Исключение с плавающей запятой», как это решить? Извините за мой плохой английский ...

+0

Показать реальный код пожалуйста. –

+1

Вы пробовали использовать отладчик? – Tom

+0

Вы не можете получить исключение с плавающей запятой в этом коде, там не отображаются значения с плавающей запятой. Опубликуйте больше кода и включите часть, содержащую ошибку (найдите номер строки в ошибке). Отправьте сообщение об ошибке. – KernelJ

ответ

5

Это очень плохая идея иметь функцию/переменную определения в файле заголовка, как и вы. Поместите определения в файл C и объявления в файл заголовка для использования других файлов C.

Ваша ошибка с плавающей точкой находится по строке 66 sudoku.h, а не там, где вы думаете.

number = rand()%m; 

С m равен нулю здесь, деля это приводит к ошибке.

Я не рассматривал весь код в деталях.

+0

да, я решил сейчас, спасибо за ответ .. :) – genesisxyz

1

@Alok, конечно же, рассказал вам, что такое ошибка (и указал проблемы с вашим файлом .h), но я хочу показать вам, как вы можете найти его самостоятельно.

  1. Во-первых, вы хотите построить с отладкой. Я побежал: gcc -g sudoku.c -o sudoku
  2. Во-вторых, я запустил его и подтвердил, что он действительно сбой с Исключение с плавающей запятой.
  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, что действительно было бы проблемой.