Les partenaires publicitaires:

Comment faire pour empêcher les fuites de mémoire en c ++

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 des fuites de mémoire, vous devez savoir quand ils se produisent plus fréquemment et être consciencieux avec votre utilisation de la "nouveau" et "effacer" Les opérateurs de C.

Choses que vous devez

  • La maîtrise de C ++
  • Le compilateur C de
  • Débogueur et autres outils logiciels d'enquête

Instructions

  1. Comprendre les bases de l'opérateur. L'exploitant du C "nouveau" alloue de la mémoire de tas. Le "effacer" opérateur libère la mémoire de tas. Pour chaque "nouvelle," vous devez utiliser un "effacer" 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.

    supprimer [] str- // Effacer ces 30 octets et de faire str pointer nulle part.



  2. Réaffecter la mémoire que si vous avez supprimé. Dans le code ci-dessous, str acquiert une nouvelle adresse avec la deuxième allocation. La première adresse est perdu irrémédiablement, et sont donc les 30 octets qu'il pointée. Maintenant, ils sont impossibles à la liberté, et vous avez une fuite de mémoire:

    char * str = new char [30] - // Give str une adresse mémoire.

    // Supprimer [] str- // Retirez le premier marquage dans cette ligne pour corriger commentaire.

    str = new char [60] - // str Donner une autre adresse de mémoire avec le premier disparu à jamais.

    supprimer [] str- // Ceci efface les 60 octets, et pas seulement les 30 premiers.




  3. Regarder les assignations de pointeur. Chaque variable dynamique (mémoire alloué sur le tas) doit être associé à un pointeur. Quand une variable dynamique devient dissociée de son pointeur (s), il devient impossible d'effacer. Encore une fois, cela se traduit par une perte de mémoire:

    carboniser str1 = new char [30] -

    carboniser
    str2 = new char [40] -

    strcpy (str1, "Fuite de mémoire") -

    str2 = str1- // Bad! Maintenant, les 40 octets sont impossibles à libérer.

    supprimer [] str2- // Ceci efface les 30 octets.

    supprimer [] str1- // possible violation d'accès. Quel désastre!

  4. Soyez prudent avec les pointeurs locaux. Un pointeur vous déclarez dans une fonction est allouée sur la pile, mais la variable dynamique il pointe est alloué sur le tas. Si vous ne supprimez pas, il va persister après la fin du programme de la fonction:

    annuler fuite (int x) {

    char * p = new char [x] -

    // Supprimer [] // p Retirez le premier marquage pour corriger commentaire.

    }

  5. Faites attention aux accolades carrés après "supprimer." Utilisation "effacer" par lui-même pour libérer un objet unique. Utilisation "effacer" [] Avec des crochets pour libérer un tableau de tas. Ne pas faire quelque chose comme ceci:

    carboniser un = new tère

    supprimer [] de un // Mauvais

    carboniser
    nombre = new char [30] -

    supprimer plusieurs-// Faux!

Conseils & Avertissements

  • Éviter de mélanger C et C ++. Utilisez new et delete, ou utiliser malloc () et free (). En aucun cas utiliser de nouveau avec free () ou malloc () avec suppression.
» » » » Comment faire pour empêcher les fuites de mémoire en c ++