problem mit exception handling
-
ich habe folgenden code:
#include <stdio.h> #include <conio.h> int main(int argc, char *argv[]) { try { char *p=0; p[0]=0; } catch(...) { printf("fehler!"); } getch(); return 0; }
wie man sieht, soll eine system exception erzeugt und abgefangen werden. in der debug konfiguration klappt das tadellos, aber in der release konfiguration schmiert das programm ab. wo liegt da der unterschied? oder ist mein code irgendwie falsch?
-
ja dein code hat undefiniertes verhalten
-
nimm windows' eingebautes SEH
__try { *(char*)0 = 0; } __except(1) { puts ("aua!"); }
-
net schrieb:
nimm windows' eingebautes SEH
__try { *(char*)0 = 0; } __except(1) { puts ("aua!"); }
also mit dem normalen C++ exception handling geht das nicht? ich würde lieber das normale C++ verwenden, weil das dann portabler ist.
-
malfunction schrieb:
also mit dem normalen C++ exception handling geht das nicht?
mal ja, mal nein. c++ exceptions taugen nichts. die kann man nur in verbindung mit 'throw' gebrauchen.
-
mit den c++ exceptions kannst du normalerweise keine hardware exceptions abfangen.
ist ne eigenheit von visual c++ das er das macht. (vielleicht auch andere windows compiler), aber das ist laut standard auf keinen fall garantiert.