logo

Hva er minnelekkasje? Hvordan kan vi unngå?

En minnelekkasje oppstår når programmerere lager et minne i en haug og glemmer å slette det.

Konsekvensen av minnelekkasjen er at den reduserer ytelsen til datamaskinen ved å redusere mengden tilgjengelig minne. Til slutt, i verste fall, kan for mye av det tilgjengelige minnet bli allokert, hele eller deler av systemet eller enheten slutter å fungere som den skal, applikasjonen mislykkes, eller systemet bremser kraftig.



Minnelekkasjer er spesielt alvorlige problemer for programmer som demoner og servere som per definisjon aldri avsluttes.

Eksempel på minnelekkasje

Eksemplet nedenfor viser konseptet med minnelekkasje.

java cast int til streng

C








/* Function with memory leak */> #include> void> f()> {> >int>* ptr = (>int>*)>malloc>(>sizeof>(>int>));> >/* Do some work */> >/* Return without freeing ptr*/> >return>;> }>

>

>

Årsaker til minnelekkasjer i C

  1. Når dynamisk tildelt minne ikke frigjøres ved å ringe ledig, fører det til minnelekkasjer. Sørg alltid for at for hver dynamisk minnetildeling som bruker malloc eller calloc, er det en tilsvarende gratis samtale.
  2. Når spor av pekere som refererer til det tildelte minnet går tapt, kan det hende at minne ikke frigjøres. Hold derfor oversikt over alle pekere og sørg for at minnet er frigjort.
  3. Når programmet avsluttes brått og det tildelte minnet ikke frigjøres, eller hvis noen del av koden forhindrer anropet av ledig, kan minnelekkasjer skje.

Hvordan unngå minnelekkasjer?

For å unngå minnelekkasjer bør minnet som er allokert på haugen alltid frigjøres når det ikke lenger er nødvendig.

Eksempel: Program for å frigjøre minne tildelt i haug for å unngå minnelekkasje

Programmet nedenfor viser at minnet som er tildelt i haugen frigjøres for å unngå minnelekkasje.

C




/* Function without memory leak */> #include> void> f()> {> >int>* ptr = (>int>*)>malloc>(>sizeof>(>int>));> >/* Do some work */> >/* Memory allocated by malloc is released */> >free>(ptr);> >return>;> }>

>

>

Eksempel: Program for å sjekke om minnet er frigjort eller ikke

Eksemplet nedenfor viser hvordan du sjekker om minnet som er tildelt på haugen er frigjort eller ikke.

C




// C Program to check whether the memory is> // freed or not> #include> #include> int> main(>void>)> {> >int>* ptr;> >ptr = (>int>*)>malloc>(>sizeof>(>int>));> >if> (ptr == NULL)> >printf>(>'Memory Is Insuffficient '>);> >else> {> >free>(ptr);> >printf>(>'Memory Freed '>);> >}> }> // This code is contributed by sarajadhav12052009>

>

>

Produksjon

Memory Freed>

Konklusjon

Avslutningsvis kan minnelekkasjer oppstå når vi tildeler minne på haugen, men glemmer å frigjøre den eller frigjøre den. På grunn av minnelekkasjer kan vi oppleve forringelse av ytelsen og systemet blir ustabilt. Minnelekkasjer forårsaker mer skade for langvarige programmer som servere. For å unngå minnelekkasjer må vi frigjøre dynamisk allokert minne ved å kalle funksjoner som free().