В коде следующего C++, это должно быть невозможно айн целочисленного деления на ноль, чтобы иметь место:VS 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 exception at 0x001712c0 in DSA_asgn1.exe: 0xC0000094: Integer division by zero.
И трассировка стека указывает на строку, указанную в коде.
UPDATE: I may have just been doing something silly here. While messing around trying to get VS to pay attention to my debug breakpoints, I rebuilt the solution and the exception isn't happening any more. It seems likely to me that I was stopping in the middle of a debug session and resuming it, when I thought I was starting new sessions.
Thanks for the responses. Would it be appropriate here to delete my question since it's resolved and wasn't really what I thought it was?
Похоже, что VS может просто сделать это с любым делением целого числа, не проверяя, возможно ли разделение на ноль. Нужно ли мне улавливать это исключение, хотя код никогда не сможет его выбросить? Если да, то как лучше всего это сделать?
Это назначение, которое указывает VS 2005/2008 на C++. Я бы предпочел не делать что-то более сложное, чем мне нужно, но в то же время мне нравится делать все по возможности, где это возможно.
Деление на ноль _looks_ невозможно здесь. Но мы могли бы использовать больше контекста. Может ли другой поток изменять gradedUnits? Вы бы поставили байты/инструкции сборки, которые компилятор включил? Возможно, оптимизатор делает что-то неожиданное? –
Это исключение во время выполнения. Попробуйте запустить его в отладчике и увидеть значения –
Вы, кажется, смущены тем, как работают исключения. Я уверен, что вы пришли из фона Java? Это исключение выбрасывается во время выполнения, когда вы делите на ноль, а не на время компиляции, чтобы сообщить вам о возможном исключении, которое может произойти. Таким образом, хотя это исключение * должно никогда не появляться, оно действительно есть, и вам нужно исследовать. –