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

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

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...