logo

Vad är minnesläcka? Hur kan vi undvika?

En minnesläcka uppstår när programmerare skapar ett minne i en hög och glömmer att radera det.

Konsekvensen av minnesläckan är att den minskar datorns prestanda genom att minska mängden tillgängligt minne. Så småningom, i värsta fall, kan för mycket av det tillgängliga minnet allokeras, hela eller delar av systemet eller enheten slutar fungera korrekt, applikationen misslyckas eller systemet saktar ner kraftigt.



Minnesläckor är särskilt allvarliga problem för program som demoner och servrar som per definition aldrig avslutas.

Exempel på minnesläcka

Exemplet nedan visar konceptet med minnesläckage.

kasta kast i java

C








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

>

>

Orsaker till minnesläckor i C

  1. När dynamiskt allokerat minne inte frigörs genom att anropa ledigt leder det till minnesläckor. Se alltid till att det finns ett motsvarande ledigt samtal för varje dynamisk minnesallokering som använder malloc eller calloc.
  2. När spår av pekare som refererar till det tilldelade minnet går förlorade kan det hända att minne inte frigörs. Håll därför reda på alla pekare och se till att minnet frigörs.
  3. När programmet avslutas abrupt och det tilldelade minnet inte frigörs eller om någon del av koden förhindrar anropet av ledig kan minnesläckor inträffa.

Hur undviker man minnesläckor?

För att undvika minnesläckor bör minne som allokerats på högen alltid frigöras när det inte längre behövs.

Exempel: Program för att frigöra minne tilldelat i hög för att undvika minnesläcka

Nedanstående program visar att minnet som tilldelats i högen frigörs för att undvika minnesläckor.

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>;> }>

>

>

Exempel: Program för att kontrollera om minnet är frigjort eller inte

Exemplet nedan visar hur man kontrollerar om minnet som tilldelats på högen är frigjort eller inte.

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>

>

>

Produktion

Memory Freed>

Slutsats

Sammanfattningsvis kan minnesläckor uppstå när vi allokerar minne på högen men glömmer att släppa det eller frigöra det. På grund av minnesläckor kan vi uppleva prestandaförsämring och systemet blir instabilt. Minnesläckor orsakar mer skada för långvariga program som servrar. För att undvika minnesläckor måste vi frigöra dynamiskt allokerat minne genom att anropa funktioner som free().