VS C ++ выбрасывает деление на ноль исключения после конкретной проверки - PullRequest
0 голосов
/ 27 марта 2010

В следующем коде C ++ должно быть невозможным, чтобы произошло целочисленное деление на ноль:

// gradedUnits and totalGrades are both of type int
if (gradedUnits == 0) {
    return 0;
} else {
    return totalGrades/gradedUnits; //call stack points to this line
}

, однако Visual Studio выдает эту ошибку:

Unhandledисключение в 0x001712c0 в DSA_asgn1.exe: 0xC0000094: целочисленное деление на ноль.

И трассировка стека указывает на строку, указанную в коде.

ОБНОВЛЕНИЕ: Я могутолько что делал что-то глупое здесь.Пока я возился с попыткой заставить VS обратить внимание на мои точки прерывания отладки, я перестроил решение, и исключение больше не происходит.Мне кажется, что я остановился в середине сеанса отладки и возобновил его, когда подумал, что начинаю новые сеансы.

Спасибо за ответы.Было бы уместно здесь удалить мой вопрос, поскольку он решен, и на самом деле это не то, о чем я думал?

Кажется, что VS может просто сделать это с любым целочисленным делением, не проверяя делениепо нулю возможно.Нужно ли перехватывать это исключение, даже если код никогда не сможет его сгенерировать?Если так, каков наилучший способ сделать это?

Это для назначения, которое определяет VS 2005/2008 с C ++.Я бы предпочел не делать вещи более сложными, чем мне нужно, но в то же время я хотел бы делать вещи правильно, где это возможно.

Ответы [ 2 ]

0 голосов
/ 31 марта 2010

Оказывается, эта проблема была вызвана исходным кодом, который не имел проверки деления на ноль, показанной здесь:

return totalGrades/gradedUnits;

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

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

0 голосов
/ 27 марта 2010

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

...