[C++] Mehrdimensionales Dynamisches Array

  • Themenstarter Themenstarter t0day
  • Beginndatum Beginndatum
T

t0day

Moin,

Ich benötige momentan einen Mehrdimensionalen Array, der dynamisch erstellt wird. Bisher habe ich (um dem Problem vorerst zu entgehen) einen statischen Array und 3 Integer zum überprüfen verwendet :
Code:
CHDMap Map[128][128][128]; 
unsigned int MapSize[3];
Allerdings ist das ja nicht grade Optimal, da der User selbst die CHDMap größe festlegen soll. (Aktuell gebe ich bei einer größe > 128 einen Fehler aus)
Daher soll der Map Array dynamisch werden. Bisher habe ich allerdings nur mit normalen Dynamischen Arrays via new gearbeitet, allerdings kann ich damit keinen 3d Array erstellen wie etwa:
Code:
CHDMap* Map = new CHDMap[iSize[0]][iSize[1]][iSize[2]];
(Fehler:)
1>error C2540: Kein konstanter Ausdruck als Arraygrenze
Wie mache ich das dann richtig?
 
Wenn wirklich alle drei Dimensionen variabel sein sollen, musst du:
1)Für die erste Dimension ein eindim. Array aus Pointern anlegen.
2)Für jeden Pointer ein eigenes Pointerarray für die zweite Dim. machen.
3)Für jeden von diesen Pointern wieder ein Array anlegen.

Für 2 Dimensionen würde das ca so ausschauen:

C++:
CHDMap **map;
map=new (CHDMap*)[128];
for (int i=0;i<128;i++)
    map[i]=new CHDMap[128];
Fehlerüberprüfung hab ich weggelassen, ist nur als Beispiel gedacht.
Freigeben musst du auch jedes einzeln wieder, zuerst halt die dritte Dim, dann die zweite ...

Wieviel Byte braucht eigentlich eines von den CHDMaps?
Bei 128-128-128 kommen über 2 Mio. Elemente zusammen...sind 2 MB mal die Bytegröße eines CHDMap Speicherverbrauch.
 
Zurück