sto leggendo sulla gestione delle eccezioni strutturata in C. Ecco un esempio di codice che non funziona come previsto:gestore delle eccezioni non chiamata in C
Questo codice è preso da qui:
http://msdn.microsoft.com/en-us/library/ha52ak6a.aspx
// C4733.cpp
// compile with: /W1 /c
// processor: x86
#include "stdlib.h"
#include "stdio.h"
void my_handler()
{
printf("Hello from my_handler\n");
exit(1);
}
int main()
{
_asm {
push my_handler
mov eax, DWORD PTR fs:0
push eax
mov DWORD PTR fs:0, esp // C4733
}
*(int*)0 = 0;
}
Questo codice deve stampare il messaggio "Hello from my_handler" quando l'eccezione viene attivata tentando di scrivere su un indirizzo di memoria non valido. Tuttavia, sembra che il gestore delle eccezioni non venga chiamato affatto.
Ho compilato questo codice e ho provato a debuggarlo con Olly Debugger. Quando si verifica l'eccezione, provo a passare l'eccezione al gestore delle eccezioni definito dall'applicazione (premendo, MAIUSC + F9) ma non viene richiamato. Ho impostato un breakpoint sul gestore delle eccezioni (prima istruzione), ma non raggiunge mai quella sezione di codice.
Quale potrebbe essere la ragione di questo?
Sembra che sia un avviso del compilatore, non un controllo degli errori di runtime. Non ho finestre quindi non posso controllare .. – texasbruce
Hai provato a compilare il tuo codice con le opzioni del compilatore '/ ZI/MTd'? In questo modo, ho ottenuto il risultato previsto. – boleto