Отлов исключительных ситуаций
Например:
try{pow(-1,0.5);}
catch(...){ShowMessage("Error!");}
При выполнении этого кода вылетает какое-то другое окошко с ошибкой но в catch(...) программа так и не заходит.
Это из-за того что math.h на чистом си написан что ли? :(
Может можно сделать чтобы прога хотя бы проходила этот фрагмент без выскакивания MessageBox'a?
Заранее спасибо за ответ.
Существует ли способ отлавливать ошибки при вызове функций из библиотеки math.h используя конструкцию try{}catch(...){}?
Например:
try{pow(-1,0.5);}
catch(...){ShowMessage("Error!");}
При выполнении этого кода вылетает какое-то другое окошко с ошибкой но в catch(...) программа так и не заходит.
Это из-за того что math.h на чистом си написан что ли? :(
Может можно сделать чтобы прога хотя бы проходила этот фрагмент без выскакивания MessageBox'a?
Заранее спасибо за ответ.
Это происходит потому, что все исключения по умолчанию ловит Борландовое IDE. Запусти прогу не из-под IDE и у тебя все нормально отработает. Чтобы отучить борланд от этой пагубной привычки - идешь в Project Options->C++ и отключаешь Exception handling (так кажется)
Что делать с этим дурацким "DOMAIN error"'ом?
Никакой он не дурацкий :) Просто всё дело в том, что исключения, обрабатываемые с помощью try/catch, - это исключения в "С++"-коде. Для перехвата ошибок в "С"-коде (которого до сих пор полным-полно в любой поставке любой С++ системы) нужны другие средства.
Посмотрите справку по функциям С run-time library _matherr и _matherrl.
Никакой он не дурацкий :) Просто всё дело в том, что исключения, обрабатываемые с помощью try/catch, - это исключения в "С++"-коде. Для перехвата ошибок в "С"-коде (которого до сих пор полным-полно в любой поставке любой С++ системы) нужны другие средства.
Посмотрите справку по функциям С run-time library _matherr и _matherrl.
Благодарю! Это то что мне было нужно.
Определил функцию:
int _matherr(struct _exception *__e)
{
throw Exception("");
}
и все заработало:)
RTFM блин... X)-