Programm stürzt ab beim array kopieren



  • Hallo,
    ich möchte ein dreidimensionales dynamisches Array erstellen und danach ein anderes Array hinein kopieren, allerdings stürzt das Programm immer wieder ab und ich kann mir nicht erklären wieso.
    Ich hoffe jemand kann mir weiterhelfen.
    Vielen Dank

    double*** k = new double** [4];
        for (int i = 0; i < 4; i++) {
            k[i] = new double* [4];
            for (int j = 0; j < 11; j++) {
                k[i][j] = new double[11];
            }
        }
        
        double konz[4][4][4] = { {1,2,3,4,5,6,7,8,9,10,11},{1,2,3,4},{1,2,3,4} };
        for (int i = 0; i < 11; i++) {
            for (int n = 0; n < 4; n++) {
                for(int j=0; j<4;j++){
                    k[i][n][j] = konz[i][n][j];
                }
            }
        }
    


  • Deine Schleifen passen nicht zu den Array-Dimensionen.

    Und du solltest besser std::array<> oder std::vector<> verwenden.
    Vllt. hilft auch Array2D: Evolution von manueller Speicherverwaltung zur STL.



  • @imaunicornk sagte in Programm stürzt ab beim array kopieren:

    ich möchte ein dreidimensionales dynamisches Array erstellen
    double*** k = new double** [4];

    Hinweis: Das ist KEIN dreidimentionales Array!
    Das ist ein Pointer auf Pointer auf Pointer auf double.

    double konz[4][4][4] = { {1,2,3,4,5,6,7,8,9,10,11},{1,2,3,4},{1,2,3,4} };

    Das hier dagegen ist ein 3d-Array. Wichtig: diese beiden Datenstrukturen sehen im Speicher ganz unterschiedlich aus!

    Wichtig auch: deine Schreibweise ist sehr verwirrend. Sie bedeutet:

    { 
      { { 1, 2, 3, 4 }, { 5, 6, 7, 8 }, { 9, 10, 11, 0 }, { 0, 0, 0, 0 } },
      { { 1, 2, 3, 4 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 } },
      { { 1, 2, 3, 4 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 } },
      { { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 } } 
    }
    

    Da kann man durch Formatierung schon erreichen, dass man besser erkennt, was tatsächlich in konz enthalten ist (ja, du kannst du nullen am Ende weglassen).

    Zu deinem Problem: warum geht deine j-Loop bis 11 statt bis 4? Außerdem solltest du für das gleiche Level immer die gleichen Index-Namen nutzen (also unten nutzt du i, n, j und oben i, j, (11))



  • @imaunicornk
    Dein k-"Array" hat die Dimensionen [4][4][11]
    Das konz Array hat die Dimensionen [4][4][4]

    Trotzdem gehst du mit der 1. Dimension (die linke) bei beiden bis zum 11. Element.


Log in to reply