Exception Handler Problem
-
Hallo wieso wird hier die Exception nicht ausgelöst ?
Meine Datei ist größer als 20 Byte.
Wenn ich das Programm dann die Datei lesen lasse wird der __except Teil einfach übersprungen
und ich bekomme ein EACCESS ViolationIch hab mich hier an diesem Beispiel orientiert: http://msdn.microsoft.com/en-us/library/ms681409(v=VS.85).aspx
Bei einer Divison durch 0 da funktioniert der Exception Handler aber wieso nicht bei meinem
ReadFile ?( Ja ich könnte auch einfach prüfen ob ret_size < 20 aber ich wollte mich mal mit exceptions beschäftigen ... )
#include <iostream> #include <windows> using namespace std; BOOL lese( ) ; int main(int argc, char* argv[]) { bool r=0; r=lese( ) ; cout<<endl; cout<< "ret: " << r; system("PAUSE"); return 0; } //--------------------------------------------------------------------------- BOOL lese() { HANDLE hfile; DWORD nbt=0; char buf[20]; DWORD ret_size = 0; hfile = CreateFile ( "test.txt", GENERIC_READ , FILE_SHARE_READ , 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0 ); ret_size = GetFileSize ( hfile , NULL ); ZeroMemory(buf, 20); __try { ReadFile (hfile , buf , ret_size , &nbt , NULL ); } // MIt EXCEPTION_ACCESS_VIOLATION anstatt EXCEPTION_STACK_OVERFLOW funktionierte es auch nicht __except(GetExceptionCode() == EXCEPTION_STACK_OVERFLOW ? EXCEPTION_EXECUTE_HANDLER : EXCEPTION_CONTINUE_SEARCH ) { cout<<"error "<<endl; return 0; } MessageBox( 0 , "ok","ok",0); cout<< buf << endl; return 1; }
-
=Seit wann löst "ReadFile" eine Exception aus?
Da gibt es einen Rückgabewert und nötigenfalls "GetLastError"...
-
Wenn man die gesamte Datei in 20 Bytes lesen will und diese größer ist, dann gibt es schon eine Exception.
Dein Problem ist, dass Du den Stack überschreibst, aber das muss noch kein Speicher Problem sein, denn wenn dort noch gültiger Stack liegt dann gibt es keine Exception.
-
Naja... Garbage in => Garbage out...
Eine Exception tritt ja auch nur zufaellig auf, falls der Callstack dies noch hergibt...