Une fuite de mémoire est un type de bug de programmation qui se produit lorsqu'un programme alloue plus de mémoire qu'il libère . De cette façon , une application peut manquer de mémoire et causer un crash du système . Pour éviter les fuites de mémoire , vous devez savoir quand ils se produisent plus fréquemment et être consciencieux avec votre utilisation du " nouveau " et "Supprimer " C + + opérateurs. Choses que vous devez
maîtrise de C + +
compilateur C + +
débogueur et d'autres outils d'investigation logiciel
Voir Plus Instructions
1
comprendre les bases de l'opérateur. L' opérateur C + + "nouveau" alloue de la mémoire de tas. L'opérateur "delete" libère la mémoire de tas. Pour chaque «nouveau», vous devez utiliser un "delete" de sorte que vous libérez la même mémoire que vous avez alloué : . Char * str = new char [ 30] ; //Allouer 30 octets pour abriter une chaîne
delete [] str //Effacer les 30 octets et faire str point de nulle part
2
Redistribuer mémoire que si vous avez supprimé . . Dans le code ci-dessous, acquiert str une nouvelle adresse avec la deuxième allocation . La première adresse est perdue irrémédiablement , et sont donc les 30 octets qu'il pointé . Maintenant, ils sont impossible à la liberté , et vous avez une fuite de mémoire : . Char * str = new char [ 30] ; //str Donnez une adresse mémoire
//delete [] str ; //Supprimer le premier commentaire marquer dans cette ligne pour corriger
str = new char [ 60] ; /.. /Donnez str autre adresse mémoire avec le premier disparu à jamais
delete [] str //ceci efface le 60 octets , et pas seulement les 30 premiers .
3
Regardez les assignations de pointeur. Chaque variable dynamique ( mémoire allouée sur le tas ) doit être associé à un pointeur. Quand une variable dynamique devient indissociable de son pointeur (s) , il devient impossible à effacer. Encore une fois, cela se traduit par une fuite de mémoire : char * str1 = new char [ 30] ;
char * str2 = new char [ 40] ;
strcpy ( str1 , " fuite de mémoire" ) ;
str2 = str1 ; //Bad ! Maintenant, les 40 octets sont impossibles à free photos delete [] str2 ; . //Ceci efface les 30 octets
delete [] str1 ; . //Possible violation d'accès . Quel désastre !
4
Soyez prudent avec les pointeurs locaux. Un pointeur que vous déclarez dans une fonction est alloué sur la pile, mais la variable dynamique il pointe est alloué sur le tas . Si vous ne supprimez pas , elle va persister après la fermeture du programme de la fonction : vide fuite (int x ) {
char * p = new char [ x] ;
//delete [] p ; . //Suppression de la première observation de marquage pour corriger
}
5
Faites attention aux crochets après le mot « supprimer ». Utilisez "delete" par lui-même de libérer un objet unique. Utilisez "delete" [] avec crochets pour libérer un tableau de tas. Ne pas faire quelque chose comme ceci: char * un = new char ;
delete [] une //Mauvais
char * nombre = new char [30] ;
supprimer plusieurs ; ! //faux