Wat is Geheugenlek (memory leak)?

Een fout waarbij met malloc of iets vergelijkbaars verkregen geheugen na gebruik niet met free wordt vrijgegeven en de pointer ernaar verloren gaat, zodat het bruikbare geheugen steeds verder krimpt. Het gebeurt vaak als een foutpad vroegtijdig terugkeert en het vrijgeven overslaat. In een kort programma neemt het besturingssysteem het geheugen bij het afsluiten terug, zodat het onopgemerkt blijft, maar in servers en embedded apparaten die lang draaien, neemt het vrije geheugen beetje bij beetje af tot een reservering uiteindelijk mislukt. Tools zoals Valgrind en AddressSanitizer (LeakSanitizer) kunnen het detecteren.

Japanse benaming: メモリリーク

“Geheugenlek (memory leak)” komt voor in 2 oefenvragen uit 2 onderwerpen, bijv. Linker, loader en uitvoerbare formaten, Basis van programmeren in C.

Vakgebied: Basis van programmeren in C

Nu oefenen: vragen over Geheugenlek (memory leak)

Uit welk gebied van het proces wordt het met malloc in C gereserveerde geheugen in het algemeen genomen?

  1. ADe .text-sectie
  2. BDe heap
  3. CDe .rodata-sectie
Antwoord en toelichting tonen

Antwoord: B. De heap

De heap is het gebied waar tijdens uitvoering van het programma geheugen van de benodigde grootte wordt gereserveerd en met free wordt teruggegeven als het niet meer nodig is. Kenmerkend is dat grootte en levensduur tijdens uitvoering kunnen worden bepaald. malloc beheert zelf het vrije gebied en vraagt bij tekort het OS het gebied uit te breiden (op Linux met de systeemaanroepen brk of mmap). Als men vergeet free uit te voeren, blijft ongebruikt geheugen bestaan: een geheugenlek.

“Geheugenlek (memory leak)” in de toelichting

Vragen met “Geheugenlek (memory leak)” (2)

  1. Uit welk gebied van het proces wordt het met malloc in C gereserveerde geheugen in het algemeen genomen?
  2. fill en use zijn elders gedefinieerde functies. Wat is een probleem van de bovenstaande functie?

Verwante termen

Dynamische geheugentoewijzing Heap Bitveld (bit-field) Bufferoverloop (buffer overflow) Dangling pointer Functiepointer Integerpromotie (integer promotion) Macro (#define) Ongedefinieerd gedrag (undefined behavior) Pointer

Naar de woordenlijst