ich über Structured Exception Handling lese in C. Hier ist ein Beispiel-Code, der nicht wie erwartet funktioniert:Exception Handler nicht in C genannt
Dieser Code von hier genommen wird:
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;
}
Dieser Code sollte die Nachricht "Hello from my_handler" ausgeben, wenn die Ausnahme ausgelöst wird, indem versucht wird, in eine ungültige Speicheradresse zu schreiben. Es scheint jedoch, dass der Ausnahmebehandler überhaupt nicht aufgerufen wird.
Ich kompilierte diesen Code und versuchte, es mit Olly Debugger zu debuggen. Wenn die Ausnahme auftritt, übergebe ich die Ausnahme an den anwendungsdefinierten Exception-Handler (durch Drücken von Shift + F9), aber sie wird nicht aufgerufen. Ich habe einen Haltepunkt an der Ausnahmebehandlungsroutine (erste Anweisung) festgelegt, aber diesen Codeabschnitt wird nie erreicht.
Was könnte der Grund dafür sein?
Sieht aus wie es eine Compilerwarnung ist, keine Laufzeitfehlerüberprüfung. Ich habe keine Windows, kann also nicht überprüfen .. – texasbruce
Haben Sie versucht, Ihren Code mit '/ ZI/MTd' Compiler-Optionen zu kompilieren? Auf diese Weise habe ich das erwartete Ergebnis. – boleto