Exception von new fangen
-
Hallo,
wenn new fehlschlägt dann möchte ich das mit einer Exception fangen. Ich dachte std::bad_alloc wäre die Geforderte.
Aber anstatt, dass die Exception geworfen wird, muss ich den Pointer auf 0 abfragen.Ich empfinde aber das Fangen einer Exception besser als das "auf 0 prüfen".
Was müsste ich denn machen, dass die Exception geworfen wird?Ich arbeite mit MS VisualStudio 6 und das hier ist mein Beispielcode:
#include <iostream> using std::cout; using std::endl; int main() { char* hugo = 0; try { hugo = new char[9999999999999999]; delete hugo; } catch(std::bad_alloc) { cout << "kein hugo" << endl; } cout << "fin" << endl; return 0; }
-
MS VisualStudio 6
das ist der grund.
-
Das würde also bedeuten, dass der gcc die Exception werfen würde?
-
hehejo schrieb:
Das würde als bedeuten, dass der gcc die Exception werfen würde?
In neueren Versionen ja, genauso wie der neue MSVC eine Exception wirft.
MfG SideWinder
-
Tjo - wir programmieren hier noch mit dem Alten.
Gut, dann frag ich auf 0 ab.Danke für die Antworten.
-
char *a = new char[9^9^9]; if( !a ) throw was_auch_immer;
-
hugo = new char[9999999999999999]; delete hugo;muss
delete [] hugo;heißen.
OT: Die Namensgebung gefällt mir

-
Man kann auch einen new-Handler installieren um die Geschichte ein wenig zu kontrollieren:
#include <iostream> #include <cstdlib> using namespace std; void noMoreMem() { cerr<<"ERROR: Can't provide more memory!"<<'\n'; abort(); }; int main(int argc, char **argv) { set_new_handler(noMoreMem); int *pArray = new int[1000000000]; delete [] pArray; return 0; };//EDIT: Tippfehler im Code