Optimale Weg, Sie zu befreien() malloc ' ed 2D-array in C

Angenommen, ich habe ein 2-dimensionales array, das erstellt wurde, mit etwas wie dieses,

char **foo = (char **) malloc(height * sizeof(char *));
for(i = 0; i <= height; i++) 
    foo[i] = (char *) malloc (width * sizeof(char *));

Zuerst von allen, Ist dies auch der richtige Weg, ein array zu erstellen wie das?. Der Haken an der Sache ist, 'Höhe' und 'Breite' ist etwas, das während der Laufzeit.

Diese scheint zu funktionieren, aber welche ist die beste Strategie, um die Kostenlose 2d-array.
frei(funge) falsch klingt. Gehen durch einige andere Beiträge hier, ich denke ich werde frei haben jeder Zeile eins nach dem anderen?

Ich habe versucht, so etwas wie dieses,

for (height = 0; height < ip_ptr->funge_height; height++) {
    free(funge[height]);
} 
free(funge)

Diese, jedoch gibt mir eine double-free-Zeiger-Ausnahme. Das bedeutet, ich don ' T zu bewältigen haben, dieses Stück der Erinnerung?. Ich war der Eindruck, dass für jedes malloc ' ed Speicher müssen wir den Aufruf free().

Das sollte funktionieren, wenn die Höhe in der erste code ist der gleiche Wert wie ip_ptr->funge_height in der zweiten
Wenn die Breite konstant ist, ist es etwas, das verhindert, dass Sie tun char **foo = (char **) calloc(height * width * sizeof(char)); ?
ja, er kann nicht schreiben Sie dann funge[i][j]; er hat zu schreiben funge[i*width+j];
Es gibt keine Notwendigkeit, umgewandelt den Rückgabewert malloc.
Eigentlich sind es mehrere Dinge falsch. Erste, calloc() nimmt zwei Parameter. Zweitens, es gibt einen Zeiger auf einen Speicherblock, der genau wie malloc(), so dass es nicht das char** Sie erwartet haben. Aber auch, dein char*foo nicht sogar als tordek schlägt vor, mit foo[iwidth+j].

InformationsquelleAutor sudharsh | 2009-10-14

Schreibe einen Kommentar