2010-11-07 19 views
8

Ho il seguente codice tratto da cplusplus.com:funzione set_terminate non funziona per me

// set_terminate example 
#include <iostream> 
#include <exception> 
#include <cstdlib> 
using namespace std; 

void myterminate() { 
    cout << "terminate handler called\n"; 
    abort(); // forces abnormal termination 
} 

int main (void) { 
    set_terminate (myterminate); 
    throw 0; // unhandled exception: calls terminate handler 
    return 0; 
} 

Poiché non v'è un'eccezione non gestita nel codice, ha bisogno di chiamare la funzione myterminate(), che viene impostata come terminare conduttore e supposto per ignorare il gestore terminato predefinito.

Il programma si arresta in modo anomalo ma non chiama myterminate(). Sto usando Visual C++ 2008 Express Edition.

Qual è il problema con il codice?

risposta

10

Una possibilità: se si esegue il programma all'interno del debugger VC++, il debugger rileva le eccezioni non gestite e potrebbe non restituire il controllo al programma in esecuzione per eseguire myterminate. Prova a eseguire il programma all'esterno di Visual C++.

+3

Sì. Avvia il programma con Ctrl + F5. –

+0

Si tratta di un bug nel debugger? – bjskishore123

+2

@ bjskishore123: No, questa è una caratteristica :) –

Problemi correlati