dynamische speicherreservierung



  • int*x = new int[10000....]

    wenn nicht genügend zusammenhängender speicher zur verfügung steht
    liefert new den NULL pointer zurück. Aber was soll ich in diesem
    Fall als programmierer machen . Einfach das programm abstürzen lassen ?
    z.b. exit (1) ?? Geht das oder gibt's nee andere Möglichkeit . Bye



  • Also Valve macht es so, dass einfach ein assert() aufgerufen wird...



  • Du fängst in der main() einfach die exception.
    und nein, es ist unwahr, daß das ding NULL zurückliefern würde. dein buch ist auf dem stand von vor 22 jahren. das mußt du doch am vergilbten papier bemerken.



  • Wie würde das dann in diesem Beispiel aussehen.

    matrix=new double[zeilen*spalten];

    also:

    try{

    matrix=new double[zeilen*spalten];
    }

    catch(matrix)
    {
    cout<<"Geben sie eine kleinere Matrix ein " ;
    }





  • was passiert im realen FAll wenn der Pointer tatsächlich NULL wäre.
    Würde das Programm wirklich abstürzen oder was passiert ?

    Muss ich eigentlich throw benutzen ?

    z.B. if (matrix== NULL ) throw ( ) wie funktioniert das ?

    DAnke



  • blurry33 schrieb:

    Wie würde das dann in diesem Beispiel aussehen.

    matrix=new double[zeilen*spalten];

    also:

    try{

    matrix=new double[zeilen*spalten];
    }

    catch(matrix)
    {
    cout<<"Geben sie eine kleinere Matrix ein " ;
    }

    fast.

    matrix=new double[zeilen*spalten];

    also:

    try{
       matrix=new double[zeilen*spalten];
       cout<<"Geben sie eine Matrix ein " ;
       rechnerechne();
       cout<<"Ergebnis.\n";
       return 0;
    }
    catch(std::bad_alloc& e){
       cout<<"Kritischer Anwendungsfehler!\n";
       cout<<"Es ist ein Fehler aufgetreten. Bitte rufen Sie Ihren Administrator an.\n";
       return 1;
    }
    


  • blurry33 schrieb:

    z.B. if (matrix== NULL ) throw ( ) wie funktioniert das ?

    Genau dieses ifthrow ist seit Äonen im new innendrin schon eingebaut.



  • blurry33 schrieb:

    was passiert im realen FAll wenn der Pointer tatsächlich NULL wäre.

    Der Zeiger wird niemals Null sein, wenn du das ganz normale new[] benutzt. Übrigens solltest du delete[] nicht vergessen, um den Speicher wieder freizugeben.

    Kóyaánasqatsi schrieb:

    Also Valve macht es so, dass einfach ein assert() aufgerufen wird...

    Was wird dort genau geprüft?



  • Nexus schrieb:

    Was wird dort genau geprüft?

    Genau weiß ich es nicht, habe den Code (leider) noch nicht sehen dürfen.



  • Kóyaánasqatsi schrieb:

    Nexus schrieb:

    Was wird dort genau geprüft?

    Genau weiß ich es nicht, habe den Code (leider) noch nicht sehen dürfen.

    wenn du es nicht genau weist, wieso schreibst du dann so was?
    denkst du, du hilfst somit irgendwem?

    auf jeden fall klang es so, als ob du folgendes meintest:

    int* foo = new int[9999999];
    assert(foo);
    

    was in doppelter hinsicht bescheuert wäre...

    assert == logikfehler
    bad_alloc == laufzeitfehler

    bb


Anmelden zum Antworten