mit catch alle Fehler abfangen
-
Hallo,
ich möchte einen beliebigen Fehler im Code abfangen, z.B.
int main () { int feld[4]; try { feld[100]= 12/(2-2); } catch (exception) { cout << "Fehler aufgetreten: "; } }
Leider klappt das nicht, auch mit catch() oder mit catch(...) klappt es nicht.
Kann ich mit catch nur Fehler abfangen, die ich mit throw ausgelöst habe?
Danke und Gruss
lkz633
-
int main () { int feld[4]; int x=2; try { feld[100]= 12/(2-x); } catch (...) { cout << "Fehler aufgetreten: "; } }
-
lkz633 schrieb:
Kann ich mit catch nur Fehler abfangen, die ich mit throw ausgelöst habe?
ja, damit kann man nur Exceptions fangen.
-
auch mit catch(...) klappt es nicht........
Wie kann ich unerwartete Fehler abfangen, die ich nicht selber ausgelöst habe?
-
C++ ist keine fehlerprüfende Sprache. Man kann eine Menge Fehler machen ohne das es dir wirklich auffällt, bis es dir um die Ohren knallt.
int f[4]; f[100]=1;
So was löst keine Exception aus. Das macht C++ auch so schwer für Anfänger, weil nicht jeder Fehler gleich bemerkt wird.
-
Ja, das ist klar, aber ein 12/0 löst einen Floating Point Exception Fehler aus.....
Wie kann ich diesen abfangen, bzw einen beliebigen Fehler?
catch (...) {} fängt ihn leider nicht ab.
-
das ist eine Hardware Exception und keine C++ Exception
-
lkz633 schrieb:
Ja, das ist klar, aber ein 12/0 löst einen Floating Point Exception Fehler aus.....
Soclhe 'Hardware'-Exceptions kann man auch fangen - allerdings nicht mit Standard C++. Du musst die Doku deines Compilers lesen, vielleicht gibt es ja einen Schalter mit dem du das aktivieren kannst. Der VC++ fängt sowas zB standardmäßig.
-
Den kannst Du auch nicht fangen. Du kannst aber ein
if(b==0.0f) throw "Division durch 0" return a/b;
schreiben.
-
D.h mit einem ganz normalen gnu c++ compiler geht das nicht anders?
Ich möchte ja gerade Fehler abfangen, die ich nicht vorher bedacht habe und somit keine Throw Anweisung haben, kann ich nicht alle Fehler abfangen?