Problem mit dynamische mehrdimensionale Arrays



  • Hallo,

    ich habe da ein kleines Problem, nämlich wie delete ich dieses Array?

    int(*const ptr)[7] = new int[5][7];
    

    MfG Zevak



  • delete[] ptr;
    


  • Genauso wie ein Eindimensionales?
    Danke für die Antwort 🙂



  • Ja, probiers doch nächstes Mal mit valgrind aus.
    Ich selber habe den Codeschnipsel noch nie gesehen, das hat mich jetzt ein bisschen aus den Socken gehauen.

    Ich würde mal sagen, du hast 7 Const-Pointers to Array die noch auf dem Stack liegen und legst für jedes Array 5 Integer auf dem Heap an, also 7*5 Integer.

    Korrigiert mich, wenn ich falsch lieg.


  • Mod

    Entscheidend ist, dass ein Array angefordert wurde; auf den Elementtyp oder die verwendete Syntax kommt es nicht an.

    using T = int[7];
    T* const p = new (T[5]);
    delete [] p;
    using U = T[5];
    T* const q = new U;
    delete [] q; // trotzdem
    

    und alles äquivalent zum usprünglichen Code.



  • zebra schrieb:

    Ich selber habe den Codeschnipsel noch nie gesehen, das hat mich jetzt ein bisschen aus den Socken gehauen.

    Ich habe im Internet geschaut, diese Art ist auch möglich aber anscheinend eher unbekannt.



  • @camper,

    aber dann ist doch beim Anfangscode etwas an der Reihenfolge falsch, würd ich mal sagen? Oder tut das nicht zur Sache?



  • zebra schrieb:

    Ich würde mal sagen, du hast 7 Const-Pointers to Array die noch auf dem Stack liegen und legst für jedes Array 5 Integer auf dem Heap an, also 7*5 Integer.

    Eigentlich sind das 5 Zeilen, die jeweils auf 7 Integer-Werte verweisen


  • Mod

    zebra schrieb:

    @camper,

    aber dann ist doch beim Anfangscode etwas an der Reihenfolge falsch, würd ich mal sagen? Oder tut das nicht zur Sache?

    was soll falsch sein?

    int(*const ptr)[7] = ...;
    

    Definiert einen konstanten Zeiger (d.h. der Zeigerwert selbst kann nicht nachträglich geändert werden und der Zeiger somit nicht auf etwas anderes zeigen). Der Zeiger zeigt dabei auf ein Array, dass aus 7 int besteht.

    new int[5][7]
    

    erzeugt ein Arrays aus 5 Elementen. Und es wird ein Zeiger auf das erste Element zurückgegeben.
    Die Elemente sind selbst Arrays aus 7 int.


Anmelden zum Antworten