Malloc ein 3-dimensionales Array in C?

Bin ich der übersetzung einige MATLAB-code in C und Skript-ich bin die Konvertierung macht starken Gebrauch von der 3D-arrays mit 10*100*300 komplexe Einträge. Die Größe des Arrays hängt auch von den sensor-Eingang, im Idealfall sollte das array werden dynamisch zugewiesen. Bisher habe ich versucht, zwei Ansätze, der erste einer flachen 1D-array entlang der Linien von

value = array[x + (y*xSize) + (z*ySize*xSize)]

Das tut weh, mein Hirn zu benutzen. Ich habe auch versucht ein array von einem array von Zeigern

int main () {
  int ***array = malloc(3*sizeof(int**));
  int i, j;

  for (i = 0; i < 3; i++) {
    *array[i] = malloc(3*sizeof(int*));
    for (j = 0; j < 3; j++) {
      array[i][j] = malloc(3*sizeof(int));
    }
  }

  array[1][2][1] = 10;

  return 0;
}

Gibt ein seg-fault, wenn ich versuche der Zuordnung der Daten.

In einer perfekten Welt würde ich gerne die zweite Methode verwenden, mit der array-notation für sauberere, einfachere Programmierung. Gibt es einen besseren Weg, um dynamisch zuweisen einer drei-dimensionales array in C?

Kommentar zu dem Problem
fügen Sie #include <stdlib.h> und entfernen Sie den * aus *array[i] und es läuft beim kompilieren des gcc Kommentarautor: Paul
Ich bin auch neugierig, wie diese umzusetzen ist. Der 1D-array-Lösung ist "cleaner" (ist es der, den ich verwenden, so weit), aber für number-crunching es ist deutlich langsamer als die 3D-statisch zugewiesen werden, aufgrund der "offset" - Berechnung. Kommentarautor: lmount
@WorldCitizeN haben Sie tatsächlich gemessen wird diese Leistung? Wenn Sie auf eine statisch reservierte array ist, werden die gleichen Berechnungen ausgeführt werden. Der einzige Unterschied ist, dass du nicht schreiben. Kommentarautor: charliehorse55
@lmount Im Allgemeinen, der Umweg ist viel teurer als integer-Multiplikation. Ich würde erwarten, dass die 1D-array schneller sein. Kommentarautor: Daniel H

InformationsquelleAutor der Frage Mike | 2010-02-21

Schreibe einen Kommentar