Una fuga de memòria es produeix quan els programadors creen una memòria en un munt i s'obliden d'eliminar-la.
La conseqüència de la fuita de memòria és que redueix el rendiment de l'ordinador reduint la quantitat de memòria disponible. Finalment, en el pitjor dels casos, es pot assignar massa memòria disponible, tot o part del sistema o dispositiu deixi de funcionar correctament, l'aplicació falla o el sistema s'alenteix enormement.
Les fuites de memòria són problemes especialment greus per a programes com els dimonis i els servidors que, per definició, no acaben mai.
Exemple de fuga de memòria
L'exemple següent mostra el concepte de fuga de memòria.
exemple de java hola món
C
/* Function with memory leak */> #include> void> f()> {> >int>* ptr = (>int>*)>malloc>(>sizeof>(>int>));> >/* Do some work */> >/* Return without freeing ptr*/> >return>;> }> |
>
>
Causes de fuites de memòria a C
- Quan la memòria assignada dinàmicament no s'allibera trucant gratis, es produeixen fuites de memòria. Assegureu-vos sempre que per a cada assignació de memòria dinàmica amb malloc o calloc, hi hagi una trucada gratuïta corresponent.
- Quan es perd el seguiment dels punters que fan referència a la memòria assignada, pot passar que la memòria no s'alliberi. Per tant, feu un seguiment de tots els punters i assegureu-vos que la memòria estigui alliberada.
- Quan el programa finalitza bruscament i la memòria assignada no s'allibera o si alguna part del codi impedeix la trucada de lliure, es poden produir fuites de memòria.
Com evitar fuites de memòria?
Per evitar fuites de memòria, la memòria assignada al munt sempre s'ha d'alliberar quan ja no es necessiti.
Exemple: programa per alliberar la memòria assignada a un munt per evitar fuites de memòria
El programa següent mostra que la memòria assignada al munt s'allibera per evitar fuites de memòria.
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>;> }> |
>
>
Exemple: Programa per comprovar si la memòria està alliberada o no
L'exemple següent mostra com comprovar si la memòria assignada al munt s'allibera o no.
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> |
>
>Sortida
Memory Freed>
Conclusió
En conclusió, es poden produir fuites de memòria quan assignem memòria al munt però oblidem alliberar-la o alliberar-la. A causa de les fuites de memòria, és possible que experimentem una degradació del rendiment i que el sistema es torni inestable. Les fuites de memòria causen més danys a programes de llarga execució com els servidors. Per evitar fuites de memòria hem d'alliberar la memòria assignada dinàmicament cridant a funcions com free().