[C] Speicherreservierung für 2D-Array

ibafluss

Erfahrenes Mitglied
Hey Leute!
Ich hab ein 2D-Array, und will jetzt das Array aber vergrößern. Wie mach ich das mit realloc? Ich weiß ja, wie das reservieren geht, aber wenn ich jetzt z.B.: das array a[10][200] habe. Und ich will jetzt mal ganz doof ausgedrückt aus dem ersten 10 einen 20 machen. Wie realisiere ich das dann mit realloc?

Lg
 
Hi.

Das Array ist vorher mit realloc bzw. malloc bzw. calloc alloziert worden?

Ansonsten ist bei einem realloc nichts weiter zu beachten, funktioniert wie bei einem 1D Array auch, da ein 2D Array auch nichts weiter als ein 1D Array von Zeigern ist...

Wenn du die zweite Dimension ändern willst, mußt du das logischerweise mit einer Schleife für alle Unterarrays machen.

Gruß
 
Wichtig:
Code:
int a[10][200];
ist statisch auf dem stack alloziert und kann NICHT resized werden.
Wenn du speicher dynamisch resizen willst MUSST du ihn auf dem heap allozieren (malloc / new)

ein paar beispiele:

allozieren:
Code:
int **data;
int i;
data = malloc(sizeof(int*)*10);
for(i = 0; i < 10; i++) {
        data[i] = malloc(sizeof(int)*200);
}

reallozieren 1. dimension (grow)
Code:
data = realloc(data, sizeof(int*)*20);
for(i = 10; i < 20; i++) {
         data[i]  = malloc(sizeof(int)*200);
}

reallozieren 1. dimension (shrink)
Code:
for (i = 9; i >= 5; i--) {
         free(data[i]);
}
data = realloc(data, sizeof(int*)*5);

realloc 2. dimension:
Code:
for (i = 0; i < 10; i++) {
        data[i] = realloc(data[i], 500);
}
 
Zurück