Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht

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

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

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

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 Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.