Speicher richtig freigeben
-
Hallo,
wenn ich folgendes Programm mit valgrind ausführe, erhalte ich das Ergebnis
total heap usage: 9 allocs, 1 frees, 450 bytes allocated
int size = 0; char *cwd = NULL; do { size += 10; free(cwd); cwd = malloc(size*sizeof(char)); errno = 0; cwd = getcwd(cwd,size); } while(errno == ERANGE); free(cwd);
Und das obwohl ich doch das cwd jedesmal vor einem neuen malloc freigebe.
Warum wird das trotzdem nicht gemacht?
Danke!
-
qwert_smeik schrieb:
Und das obwohl ich doch das cwd jedesmal vor einem neuen malloc freigebe.
Und wer sagt dir, dass cwd nach getcwd noch dasselbe ist, was du von malloc bekommen hast?
-
getcwd gibt im Fehlerfall NULL zurück, womit der ursprüngliche Wert von cwd verlorengeht. Versuch's mit
int size = 0; char *cwd = NULL; do { size += 10; free(cwd); cwd = malloc(size*sizeof(char)); errno = 0; getcwd(cwd,size); } while(errno == ERANGE); free(cwd);
Besser noch: Benutz realloc.
-
stimmt, da hast du recht. Danke!
-
char *cwd = getcwd(NULL,0); //... free(cwd);
-
Das läuft aber dann nicht unter BSD (ist eine Linux-spezifische Erweiterung).
-
das kann nicht nur linux
http://msdn.microsoft.com/de-de/library/sf98bd4y.aspx