« Programmation C/Gestion de la mémoire » : différence entre les versions

Contenu supprimé Contenu ajouté
m On peut plus parler d'ébauche...
Ligne 159 :
 
En règle générale, il faut éviter que plusieurs variables pointent la même zone mémoire allouée.
 
=== Fuite mémoire ===
 
La perte du pointeur associé à un secteur mémoire rend impossible la libération du secteur à l'aide de free. On qualifie cette situation de fuite mémoire car des secteurs demeurent réservés sans avoir été désalloués. Cette situation perdure jusqu'à la fin du programme principal. Voyons l'exemple suivant:
 
int i=0; // un compteur
int* ptr=NULL; // un pointeur
while(i<1001) {
ptr=malloc(sizeof(int)); // on écrase la valeur précédente de ptr par une nouvelle
if(ptr!=NULL) {
/* traitement ....*/
}
}
 
À la sortie de cette boucle on a alloué un millier d'entiers soit environ 2000 octets, que l'on ne peut pas libérer car le pointeur ptr est écrasé à chaque itération (sauf la dernière). La mémoire disponible est donc peu à peu grignotée jusqu'au dépassement de sa capacité. Ce genre d'erreurs est donc à proscrire pour des processus tournant en boucle pendant des heures, voire indéfiniment. Si son caractère cumulatif la rend difficile à détecter, il existe de nombreux utilitaires destinés à traquer la moindre fuite.
 
[[Catégorie:C]]