Ich versuche gerade ein 2d-Array zu bauen, das während der Laufzeit mit dynamischer Grösse erzeugt wird. Dazu alloziere ich mir mit Hilfe des Zeigers "pointer" einen Speicherblock, den ich mir so zurechtbiege, dass ich mit pointer[x][y] auf die einzelnen Elemente des Arrays zugreifen kann.
Das klappt auch, allerdings nur für relativ kleine Werte für DIM_X bzw. DIM_Y.
Bei DIM_X = 50 und DIM_Y = 1000 schmiert das Programm ab, wenn auf pointer[13, 0] zugegriffen wird:
Code: Alles auswählen
(12,995) <- 12995
(12,996) <- 12996
(12,997) <- 12997
(12,998) <- 12998
(12,999) <- 12999
Speicherzugriffsfehler
Code: Alles auswählen
#include <stdio.h>
int main () {
const int DIM_X = 50; /* 1te Dimension des Arrays */
const int DIM_Y = 1000; /* 2te Dimension des Arrays */
int i, j, **pointer;
/* Speicher allozieren */
pointer = (int**) malloc (DIM_X * sizeof (int*) + DIM_X * DIM_Y * sizeof (int));
/* Speicherblock in ein 2d-Array "zurechtbiegen" */
for (i = 0; i < DIM_X; i++)
pointer[i] = (int*) (pointer + DIM_X * sizeof (int*) + i * DIM_Y * sizeof (int));
/* Array mit Werten füllen */
for (i = 0; i < DIM_X; i++)
for (j = 0; j < DIM_Y; j++) {
pointer[i][j] = (i * DIM_Y) + j;
printf (" (%i,%i) <- %i\n" , i, j, pointer[i][j]);
}
/* Array durchlaufen und Werte ausgeben */
for (i = 0; i < DIM_X; i++)
for (j = 0; j < DIM_Y; j++)
printf (" (%i,%i) -> %i\n" , i, j, pointer[i][j]);
/* Speicher freigeben */
free (pointer);
return 0;
}
Gruß
Pit