ein Kapitel zurück                                           ein Kapitel weiter

Die Funktion....

#inlcude <stdlib.h>

void free(void *zeiger);


...haben sie ja schon öfters verwendet, dient zur Freigabe von Speicher den sie zuvor mit malloc, calloc, realloc angefordert haben. Folgendes gibt es bei dieser Funktion aber zu beachten.....

  • Falls sie einen Speicher freigeben den sie nicht zuvor mit malloc, calloc oder realloc allokiert haben, kann dies katastrophale Folgen haben da damit die ganze Speicherverwaltung aus dem Tritt gebracht werden könnten. Also Achten sie darauf das wirklich nur Speicherplatz freigeben den sie auch angefordert haben.
  • Speicher den sie mit free freigeben wird während der Laufzeit des Prozesses nicht wirklich an den Kern zurückgegeben sondern in einem sogenannten malloc - pool gehalten um bei Bedarf während des laufenden Prozesses wieder darauf zurückgreifen zu können. Erst wenn der Prozess beendet wird geht der Speicher wieder zurück an den Kern.


Ein extra Kapitel für free? Beim Speicher allokieren mittels malloc wird der Aspekt den Speicher wieder freizugeben häufig vernachlässigt. In unseren Beispielen im C-Kurs dürfte ein Vergessenes free() nicht tragisch sein, da ein Programm das sich beendet seinen Speicherplatz automatisch wieder freigibt. Auch bei kleineren Tools die sie später mal schreiben werden dürfte das auch kein Problem sein. Schlimmer dürfte der Fall aber bei sogenannten Server-Programme sein, die oft Wochen-bzw-Jahrelang laufen. Das Programm wird zwangsweise immer langsamer. Man spricht dabei von Memory Leaks (Speicherleck). Das passiert sicherlich nur Anfängern, werden sie mir jetzt entgegnen? Das ist leider ganz und gar nicht so. Nicht umsonst verdienen sich viele Softwarehersteller, die solche und andere Programmierfehler entdecken, eine goldene Nase. Memory Leaks gehören neben Buffer Overflows zu den meist gemachten Fehlern von C-Programmierern. Mehr zu Memory Leaks finden sie in einem späteren Kapitel.

ein Kapitel zurück          nach oben           ein Kapitel weiter


© 2001,2002 Jürgen Wolf