Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

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

Geschrieben

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

Geschrieben
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

Geschrieben

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

Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren

Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde Dich hier an.

Jetzt anmelden

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...