после отработки catch(...) исключение остается необработанны
От: al777  
Дата: 17.01.12 15:39
Оценка:
Здравствуйте все!
Такая ситуация интересная:
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 бы разобраться...)

Заранее всем спасибо.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.