Feld von Instanzen mit New



  • Hallo,

    ich muss in einem Programm mit new einmal ein ein double Feld erstellen und einmal ein Feld von Instanzen einer Klasse.

    Wichtig ist hierbei natürlich die Überprüfung ob überhaupt genug Speicher zu Verfügung steht.

    Also habe ich mit Try und Catch versucht die Fehler abzufangen.

    Bei dem double array klappt das auch einwandfrei.

    try {
        newpt = new double[ns];
    }
    catch (bad_alloc &e){
        printf("\n!Fehler! Zu wenig Speicher für neues Array!\n");
        return pt;	
    }
    

    Versuche ich allerdings das selbe mit meiner Klasse, fängt er den Fehler nicht ab.
    Es kommt erst ganz oft die Ausgabe des Konstruktors und dann schmiert das Programm mit nen Segmentation Fault ab.

    try {
        newpt = new EK[ns];    
    }
    catch (bad_alloc &e){
        printf("\n!Fehler! Zu wenig Speicher für neues Array!\n");
            return pt;	
    }
    

    Kann mir jemand sagen wie ich diesen Fehler abfange und ob mein Versuch mit Try und Catch der richtig gewählte Weg ist. Vielleicht gibt es ja eine bessere Methode.



  • Versuchs einfach mal so. Wer weiss was da geworfen wird

    catch (const std::exception& the_exception) 
    { 
        std::cout << the_exception.what() << std::endl; 
    }
    

    Kurt



  • außerdem vielleicht noch das

    catch (...)
    {
        std::cout << "Irgendeine Exception" << std::endl;
    }
    


  • Also cout wird hier absichtlich nicht benutzt und soll auch nicht benutzt werden (Vorgabe)



  • Capasso schrieb:

    Also cout wird hier absichtlich nicht benutzt und soll auch nicht benutzt werden (Vorgabe)

    jo, ohne cout gehen die beispiele auch nicht mehr.

    mfg.



  • @Capasso
    Dann nimm halt printf statt dessen.



  • Capasso schrieb:

    Also cout wird hier absichtlich nicht benutzt und soll auch nicht benutzt werden (Vorgabe)

    Na ja im Geheimen wirst du's ja versuchen können. Wenn du mal weisst welche exception da geworfen wird kannst du das ganze ja wieder nach printf umbauen. Und niemand was sagen dass du cout verwendet hast 😉


Anmelden zum Antworten