Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (GNU/Linux, *NIX, *BSD und Co) » Speicherzuweisung mehrdimensionales Array

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
22.09.2009, 17:44 Uhr
~adriank
Gast


Hallo.

Ich möchte ein mehrdimensioneles Array erzeugen wobei die Dimensionen während der Laufzeit bestimmt werden. Zum Beispiel:

dim1, dim2, dim3 = f(a,b,c);

Und dann:

float array[dim1][dim2][dim3];

Wenn die Dimensionen im Bereich von ca. 4x4x4 sind funktioniert das Programm. Sobald die Dimensionen im Bereich von 100x100x100 liegen, bekomme ich einen "Segmentation fault".

Da einige Arrays fünf oder mehr Dimensionen haben, möchte ich for-Schleifen vermeiden.

Wie müsste also eine Speicherzuweisung (z.B. mit malloc) aussehen, damit ich keine "Segmentation fault" bekomme?

Vielen Dank schon mal,
Adrian
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
22.09.2009, 18:39 Uhr
0xdeadbeef
Gott
(Operator)


Du wirst da in einen Stack-Overflow gelaufen sein. Die üblichste Lösung für dieses Problem ist

C++:
float *array = malloc(sizeof(float) * dim1 * dim2 * dim3);

// und dann Adressierung etwa so:

array[x * dim2 * dim3 + y * dim3 + z] = 0.0f;


Der Lesbarkeit halber würde ich das wohl in eine Funktion verpacken, beispielsweise

C++:
struct extents_3d {
  size_t dim1, dim2, dim3;
};

size_t make_index(struct extents_3d const *spec, size_t x, size_t y, size_t z) {
  return x * spec->dim2 * spec->dim3
       + y * spec->dim3
       + z;
}

// ...

struct extents_3d array_spec = { dim1, dim2, dim3 };
array[make_index(&array_spec, x, y, z)] = 0.0f;



Bist du an C gebunden, oder könntest du auch C++-Bibliotheken benutzen?
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra

Dieser Post wurde am 22.09.2009 um 18:43 Uhr von 0xdeadbeef editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (GNU/Linux, *NIX, *BSD und Co) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: