-nPrCrZ Geschrieben 8. Mai 2003 Geschrieben 8. Mai 2003 Hi, können zweidimensionale Arrays dynamisch erzeugt werden? Habs schon so versucht: bool * test = new bool [3] [2]; test[1][1] = true; delete [] test; Bekomme aber einen Fehler beim compilieren. mfg Chris Zitieren
Guybrush Threepwood Geschrieben 8. Mai 2003 Geschrieben 8. Mai 2003 Die Boardsuche hätte unter anderem diesen Thread zum Vorschein gebracht;) Gruß Guybrush Zitieren
Diablo999 Geschrieben 8. Mai 2003 Geschrieben 8. Mai 2003 Hi Chris... Leider ist es meines Wissens nach nicht möglich dynamische mehrdimensionale Arrays in C++ zu erzeugen, das liegt daran das du den zeiger den dir new zurückgibt einer Variable vom Typ bool* zuweist. Um auf einen Pointer zuzugreifen gibt es die Möglichkeiten *Var und Var[x] . Da der C Compiler aber nicht "weiß" das dein Zeiger auf ein mehrdimensionales Array zeigt kannst du nicht darauf zugreifen wie bei mehrdimensionalen statischen Arrays. Um dies zu können müsste der Compiler der Obergrenze der zweiten Dimension kennen um das richtige Feld zu ermitteln. Jedoch weißt du ja die Dimesionen und kannst dir einen Workaround basteln. z.B. bool* x = (bool*)new bool[3][4]; // Poiner auf des 2-dimensionale Array erzeugen // Zugriff auf x[2][3] x[2*4 + 3] = 1; // 2*4 ergibt dabei den offset auf die 1. Dimension // 3 gibt das offset in der 2. Dimension an Hoffe das ist verständlich.... Diablo999 Zitieren
Guybrush Threepwood Geschrieben 8. Mai 2003 Geschrieben 8. Mai 2003 Original geschrieben von Diablo999 Hi Chris... Leider ist es meines Wissens nach nicht möglich dynamische mehrdimensionale Arrays in C++ zu erzeugen, ... Doch ist es, siehe oben;) und wenn du es mit new machen willst: char *(*p); (*p) = new char[20]; p[0] = new char[5]; p[1] = new char[10]; p[0][0] = 'r'; strcpy(p[1],"hallo"); usw. [/PHP] PS: nicht vergessen den Speicher wieder freizugeben;) Gruß Guybrush Zitieren
Diablo999 Geschrieben 8. Mai 2003 Geschrieben 8. Mai 2003 Hi Guybrush... Bei deinem Code hast du aber kein richtiges 2-Dimensionales Array Es ist mehr ein Array von Zeigern die wiederum auf eindimensionale Arrays zeigen. Ein Array ist im Speicher immer zusammenhängend, ansonsten ist es kein Array mehr. Bei deiner Version müssten für die Anzahl der 1. Dimension ein new aufruf geschehen um die 2. Dimension zu allocieren was sich nicht unbedingt positiv auf das laufzeitverhalten auswirken würde. Da ist ein Zugriff über Offsets die effizientere Lösung. Gruß Diablo999 Zitieren
nic_power Geschrieben 8. Mai 2003 Geschrieben 8. Mai 2003 Das hier sollte Dir eigentlich weiter helfen: http://www.cs.uregina.ca/links/class-info/210/Lab7_2DArray/ Nic Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.