Zugriff auf dynamisch erstellte 2dimensionale Arrays
-
Hey Leute,
ich bin dabei, eine numerische Lösung der Wärmeleitungsgleichung zu programmieren, aber das nur nebenbei. Wichtiger ist, dass ich dazu ein dynamisch erstelltes zweidimensionales Array benutzen muss, da sich die Größe je nach Berechnung offensichtlich ändert. Vorher hab ich statische Speicherverwaltung benutzt, war es dann aber müde, jedesmal den Quelltext zu ändern.Das Array A erstelle ich derzeit mit malloc.
Das Problem, was ich jetzt habe, ist folgendes:
Ich kann auf mein Array offensichtlich nicht über A[][] zugreifen. A[] geht. Da ich mein Programm aber so aufgebaut habe, dass A[][] ca. 30 mal in mehr oder weniger komplexen Schleifen vorkommt, bin ich auf der Suche nach einer Möglichkeit über A[][] zuzugreifen, anstatt alle A[][] in A[] umzuschreiben.Zusammengefasst: Gibt es in C eine Möglichkeit, zweidimensionale Arrays dynamisch zu erstellen und auf diese über array[][] zuzugreifen?
-
Ja
-
oder ausführlicher:
double ** Array = malloc(sizeof(double*) * rowcount); for(i=0;i<rowcount;++i) Array[i]=malloc(sizeof(double) * colcount);
(wichtig - am Programmende erst alle "Zeilen" freigeben, dann das Gesamt-Array
Alternativ kannst du auch ein eindimensionales Array erstellen und mit Array[col+row*colcount] auf die Elemente zugreifen.
-
und hier zusätzlich die c++ variante, damit die freigabe nochmal deutlich wird
http://www.c-plusplus.net/forum/viewtopic-var-t-is-39489.html
-
CStoll schrieb:
oder ausführlicher:
Alternativ kannst du auch ein eindimensionales Array erstellen und mit Array[col+row*colcount] auf die Elemente zugreifen.Das frisst aber auch nur ein C-Compiler, die C++ Compiler haben 'run-time range checking'.
-
Seit wann denn das?
(btw sind wir hier im C Board ;))
-
CStoll schrieb:
Seit wann denn das?
Wie meinst du das?
(btw sind wir hier im C Board ;))
Eh, es ist noch so früh am Morgen
-
Seit wann hat ein C++ Compiler "run time range checking"? (oder redest du da von managed Code ala .NET?)
-
Entschuldige, ich war grad woanders, ich redete von sowas:
int arr[2][4]; for (int i=0;i<8;++i) arr[0][i] = 0;
-
thx leute, werds morgen früh gleich mal ausprobieren
.