Какая часть этого вызывает исключение с плавающей запятой?

Я был бы очень признателен, если бы люди могли просмотреть этот фрагмент кода и сообщить мне, что может стать причиной исключения с плавающей запятой.

Информация:

  • ветки - это размер массива int 200
  • строка представляет собой массив символов размера 20
  • Цикл работает нормально 6 раз, затем возникает исключение.

Я сбит с толку, потому что нет деления, числа с плавающей запятой или целого числа, которые могли бы вызвать это.

    for (count = 0; count < sizeof(branches); count++){

    if (fgets(line,sizeof(line),fp)==NULL)
     break;
    else {

    int branch_taken = line[16] - 48; 

    branches[count] = branch_taken;
     }   
    }

1 ответ

Решение

sizeof(branches) это размер в байтах - вам нужно использовать константу, которая представляет количество элементов, т.е. 200, иначе вы будете выходить за пределы вашего branches массив, который приведет к неопределенному поведению.

Ваш код, вероятно, должен выглядеть примерно так:

#define NUM_BRANCHES 200

int branches[NUM_BRANCHES];

for (count = 0; count < NUM_BRANCHES; count++)
{
    ...
Другие вопросы по тегам