2014-08-19 2 views
0

У меня есть следующий пример:Необработанные исключения - форсирование программы выхода

void Unhandled() { 
    cout << "Unhandled exception!" << endl; 
// exit(-1); 
} 
int main(){ 
    float a, b; 
    set_terminate(Unhandled); 

    try{ 
     cout << "Input two numbers: "; 
     cin >> a >> b; 
     if (b == 0) 
      throw "Division by zero!"; 
     cout << a/b; 
    } 
    catch (int n){ 
     cout << "Error ID: " << n << endl; 
    } 
    return 0; 
} 

Я написал этот код, который обрабатывает «необработанные» исключения, но это все еще заставляет меня выйти из программы с помощью функции «выхода» или она называет " прервать "по умолчанию. Можно ли этого избежать, чтобы я продолжал выполнять приложение, как правило, после вызова «Необработанный»?

ответ

1

невозможно - когда вызывается Unhandled, ваша программа уже разбилась и погибла.

Если вы хотите продолжить свою программу, просто поймайте исключение;

... 
catch (const char *) 
{ 
    cout << "Unhandled exception!" << endl; 
    // continue...... 
} 
3

No. set_terminate позволяет обеспечить обратный вызов для запуска при выходе из программы, не вместо выхода из программы.

Кроме того, вы бросили const char* (вроде), но попытались поймать int, поэтому ваше исключение не было обработано. Просто поймайте его правильно.

+1

int есть только для примера. – Tracer

Смежные вопросы