Free
← Speicherverwaltung: Malloc | ● | Speicherverwaltung: Memset, Realloc etc. →
Wird der Speicherbereich nicht mehr benötigt, muss er mit der Funktion free()
freigegeben werden.
free(ptr);
Hinweis: realloc(ptr, 0)
entspricht free(ptr)
, free(NULL)
ist ohne Effekt aber erlaubt.
Achtung: Ein vergessener Zeiger auf einen unbenutzten Speicherbereich, der nicht freigegeben wurde, führt zu einem sogenannten Speicherleck (memory leak). Dies ist ein Hauptgrund für Programmabstürze, wenn nach und nach sämtlicher vorhandener Speicher verbraucht wurde. Tipp: Speicherlecks findet man unter MacOS X auf einfache Weise mit dem Programm leaks
.
Wird ein Programm kontrolliert beendet, werden sämtliche noch vorhandene Speicherbereiche freigegeben. Dann ist kein Aufruf von free()
notwendig.
Fallgrube: Die Funktion free()
gibt zwar Speicher frei, der entsprechende Zeiger zeigt aber weiterhin auf eine Adresse. Wird dieser Zeiger fälschlicherweise weiterhin benutzt, ergibt dies eine Speicherverletzung (address violation).
← Speicherverwaltung: Malloc | ● | Speicherverwaltung: Memset, Realloc etc. →