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


Anmelden zum Antworten