Dynamisches Array



  • Guten Morgen!

    Ich habe Schwierigkeiten mit einem dynamischen Array.
    Der Code meiner Funktion sieht augenblicklich so aus:

    void einkaufBrett(int laengeNeu, Holzsorten holzsorte, int *bestandM){
    
        if(holzsorte == 2){
            int *bestandM1 = new int[++brettlaengen];
    
            for(int i = 0; i < brettlaengen; ++i){
                bestandM1[i] = bestandM[i];
                bestandM1[brettlaengen-1] = laengeNeu;
            }
    
            bestandM1[brettlaengen-1] = laengeNeu;
    
            delete [] bestandM;
    
            cout << endl;
            cout << "Mahagoni - vorhandene Laengen: " << endl;
    
            for(int i = 0; i < brettlaengen; ++i){
                cout << bestandM[i] << " ";
            }
    
        }
    
    }
    

    Meine Funktion vergrößert das vorhandene Array um ein Element.
    Kopiert dann die alten Werte in das neue Array.
    Gibt den Speicherplatz für das alte Array frei.
    Schreibt dann an die zusätzlich vorhandene Stelle einen neuen Wert.

    Das Problem ist, dass ich zuerst die Ausgabe
    Mahagoni - vorhandene Laengen:
    5 10 15 20 25 30 35 40 45 50
    erhalte und dann
    Mahagoni - vorhandene Laengen:
    5 10 15 20 25 30 35 40 45 50 0

    Somit habe ich zwar eine Stelle mehr erzeugt.
    Jedoch steht darin immer Null.

    Freue mich über jede Unterstützung.
    Danke



  • Benutze std::vector statt mit new und delete rumzuhampeln.



  • vector ist klar besser. Ich kommentiere aber erstmal den Code

    void einkaufBrett(int laengeNeu, Holzsorten holzsorte, int *bestandM){ 
    
        if(holzsorte == 2){ 
            int *bestandM1 = new int[++brettlaengen]; // wo kommt dieses brettlaengen her?
            // Schleife läuft bis brettlaengen-1
            // hat bestandM überhaupt die richtige Länge? Ich denke nein.
            for(int i = 0; i < brettlaengen; ++i){ 
                bestandM1[i] = bestandM[i]; 
                bestandM1[brettlaengen-1] = laengeNeu; // Warum ist das hier in der Schleife?
            } 
    
            bestandM1[brettlaengen-1] = laengeNeu; 
    
            delete [] bestandM; // hier löschst du bestandM
    
            cout << endl; 
            cout << "Mahagoni - vorhandene Laengen: " << endl; 
    
            for(int i = 0; i < brettlaengen; ++i){ 
                cout << bestandM[i] << " "; // hier greifst du auf das gelöschte bestandM zu 
            } 
    
        } 
        // bestandM1 ist nach der Funktion auch nicht mehr zugänglich
    
    }
    


  • Und die Funktion, die einkaufBrett aufruft, weiß nichts von dem neuen Array.
    bestandM ist dann auch gelöscht.

    D.h. du hast keine Daten mehr.



  • Danke für den Tipp mit dem Vektor.

    Werde das jetzt mal ausprobieren.


Log in to reply