Was ist Speicherleck (Memory Leak)?

Fehler, bei dem mit malloc o. Ä. reservierter Speicher nach der Verwendung nicht mit free freigegeben wird und auch der Zeiger auf den Bereich verloren geht, sodass der verfügbare Speicher schrumpft. Häufig wird die Freigabe auf einem Pfad vergessen, auf dem die Funktion wegen eines Fehlers vorzeitig zurückkehrt. Bei kurzen Programmen fällt das kaum auf, weil das Betriebssystem den Speicher beim Programmende zurückholt; bei lange laufenden Servern und Embedded-Geräten schrumpft der freie Speicher jedoch allmählich, bis eine Reservierung schließlich fehlschlägt. Erkennen lässt es sich etwa mit Valgrind oder AddressSanitizer (LeakSanitizer).

Japanische Bezeichnung: メモリリーク

„Speicherleck (Memory Leak)“ kommt in 2 Übungsfragen aus 2 Themen vor, z. B. Linker, Loader und ausführbare Formate, Grundlagen der Programmiersprache C.

Fachgebiet: Grundlagen der Programmiersprache C

Jetzt üben: Fragen zu Speicherleck (Memory Leak)

Aus welchem Bereich eines Prozesses wird der mit malloc in C reservierte Speicher im Allgemeinen genommen?

  1. AAus der Section .text
  2. BAus dem Heap
  3. CAus der Section .rodata
Antwort und Erläuterung anzeigen

Antwort: B. Aus dem Heap

Der Heap ist der Bereich, in dem zur Laufzeit Speicher in der benötigten Größe angefordert und bei Nichtgebrauch mit free zurückgegeben wird. Kennzeichnend ist, dass sich Größe und Lebensdauer erst zur Laufzeit festlegen lassen. malloc verwaltet den freien Platz selbst und fordert bei Bedarf vom Betriebssystem eine Vergrößerung an (unter Linux über die Systemaufrufe brk oder mmap). Wird free vergessen, bleibt ungenutzter Speicher bestehen, was einen Speicherleck (Memory Leak) ergibt.

„Speicherleck (Memory Leak)“ in den Erläuterungen

Fragen mit „Speicherleck (Memory Leak)“ (2)

  1. Aus welchem Bereich eines Prozesses wird der mit malloc in C reservierte Speicher im Allgemeinen genommen?
  2. fill und use seien separat definierte Funktionen. Welches Problem hat die obige Funktion?

Verwandte Begriffe

Dynamische Speicherreservierung Heap Ausrichtung und Auffüllung (Alignment und Padding) Bitfeld Dangling Pointer (hängender Zeiger) Funktionszeiger Integer-Promotion Makro Präprozessor Pufferüberlauf (Buffer Overflow)

Zur Glossarübersicht