Здравствуйте все!
Такая ситуация интересная:
Visual Stidio 2008.
Есть код типа этого:
int V = 0;
double d,Old = 0.0;
try {
d = (double)V/Old;
} catch (...) {
PRINT_LOG();
}
a = d;
catch(...) отрабатывает, НО:
после него не выполняется a = d, а исключение вылетает выше — в вызвавшую ф-ию, где тоже есть try-catch. Отрабатывает следующий catch(...) и после него — тоже вылетает на уровень выше и программа выполняет недопустимую операцию.
SEH включена (/EHa).
Исключения для Floating point включены (/fp:except).
В вывод пишет такое:
Первый этап обработки исключения в "0x00c67b5c" в "Project1.exe": 0xC0000090: Floating-point invalid operation.
Первый этап обработки исключения в "0x00c5d5a8" в "Project1.exe": 0xC0000090: Floating-point invalid operation.
Первый этап обработки исключения в "0x727b23cc" в "Project1.exe": 0xC0000090: Floating-point invalid operation.
Первый этап обработки исключения в "0x75ea7c1a" в "Project1.exe": 0xC0000090: Floating-point invalid operation.
Первый этап обработки исключения в "0x727b23cc" в "Project1.exe": 0xC0000090: Floating-point invalid operation.
Первый этап обработки исключения в "0x75ea7c1a" в "Project1.exe": 0xC0000090: Floating-point invalid operation.
Первый этап обработки исключения в "0x75ea7c1a" в "Project1.exe": 0xC0000090: Floating-point invalid operation.
Первый этап обработки исключения в "0x727b23cc" в "Project1.exe": 0xC0000090: Floating-point invalid operation.
Первый этап обработки исключения в "0x727b23cc" в "Project1.exe": 0xC0000090: Floating-point invalid operation.
Первый этап обработки исключения в "0x00c66f54" в "Project1.exe": 0xC0000090: Floating-point invalid operation.
Первый этап обработки исключения в "0x6d6466f6" в "Project1.exe": 0xC0000090: Floating-point invalid operation.
Первый этап обработки исключения в "0x75ea7c1a" в "Project1.exe": 0xC0000090: Floating-point invalid operation.
Первый этап обработки исключения в "0x75ea7c1a" в "Project1.exe": 0xC0000090: Floating-point invalid operation.
Первый этап обработки исключения в "0x75ea7c1a" в "Project1.exe": 0xC0000090: Floating-point invalid operation.
Первый этап обработки исключения в "0x75ea7c1a" в "Project1.exe": 0xC0000090: Floating-point invalid operation.
Необработанное исключение в "0x75ea7c1a" в "Project1.exe": 0xC0000090: Floating-point invalid operation.
Как это вообще получается? Что я не так делаю?
Почему catch'и получают управление, но исключение продолжает передаваться выше?
Как бороться?
(__except пока не пробовал — не дает использовать из-за объектов, да и с catch бы разобраться...)
Заранее всем спасибо.