dynamisches drei-dimensionales Array



  • Hallo,
    Ich habe schon im Forum gesucht, aber nix passendes gefunden...
    Also, zuerst hab ich ihn der FAQ was gefunden, wie man mehr dimensionale Arrays erstellt.
    Die dritte Lösung gefällt mir am besten...
    Nun möchte ich das auf ein drei dimensionales Array machen...

    ich bräuchte so ein array : char Seiten[x][y][128];

    x und y können variabel sein, muss also der Benutzer eingeben...
    Wie stell ich das an?
    Oder geht das mit dem Ansatz gar nicht?

    Danke



  • Da eine dynamische Zuweisung einen Pointer zurückliefert kann sowas nicht wirklich funktionieren.
    Am besten geht das denke ich so (oder jemand hat noch eine besser Idee) :

    char * array = new char[x * y * 128];
    

    Ich hoffe die Schreibweise ist richtig (hab schon ewig kein C++ mehr programmiert).

    Du kannst das dann aber leider nicht wie ein Feld ansprechen. Es wird dadurch nur eine entsprechende Anzahl an Speicher reserviert.

    Wenn Du auf ein spezielles Feld zugreifen willst geht das nach der Formel (Stichwort Zeigerarithmetik):
    (Beispiel für zugriff auf Feld [5, 9, 6])

    char feld = *(array + 5 + (9 * x) + (6 * x * y));
    

    (Ich hoffe das stimmt so eingermaßen 😉 )



  • Doch, auf den so allokierten Speicher kann man wie auf ein eindimensionales Array zugreifen. Da kann man aber auch gleich einen std::vector<char> nehmen und sich das Management sparen. Ich glaube, Boost (www.boost.org) hat ein mehrdimensionales Array, dessen Größe erst bei der Initialisierung feststehen muss.


Anmelden zum Antworten