2009-02-23 6 views
2

Je veux vérifier que toute ma mémoire a été libérée dans Visual Studio 2008 en C++. J'ai entendu que je peux ajouter quelques inclus et peut-être écrire une ligne de code et cela devrait le faire.Comment vérifier que la mémoire a été libérée dans Visual Studio C++?

Est-ce que quelqu'un sait comment je peux le faire?

Merci à l'avance,

Greg

+0

Cette page pourrait être un bon point de départ: http://msdn.microsoft.com/fr-fr/library/aa366781(VS.85).aspx –

+0

Voir [cette question] (http://stackoverflow.com/questions/45627/how-do-you-detect-avoid-memory-leaks-in-your-non-managé-code) pour beaucoup d'informations. –

Répondre

5

Quelque chose comme cela peut être ce que vous recherchez.

#define _CRTDBG_MAP_ALLOC 
#include <stdio.h> 
#include <crtdbg.h> 

int main() 
{ 
    malloc(100); 
    _CrtDumpMemoryLeaks(); 
    return 1; 
} 
0

comprennent "Crtdbg.h"

et utiliser

_CrtDumpMemoryLeaks()

Vous pouvez regarder dans crtdbg pour d'autres méthodes qui peuvent également être utiles.

1

L'une des méthodes les plus anciennes consiste à remplacer les opérateurs nouveaux et supprimés (en supposant que toutes les allocations de tas soient effectuées via new). Prnt outs placés stratigically à l'intérieur de vos nouveaux opérateurs de suppression et de suppression vous permettent de vous assurer que vous avez nettoyé avant de quitter. Mais cela peut être un peu difficile; vous seriez tenté de surcharger et de supprimer dans la portée globale. Mais cela pourrait poser d'autres bogues non expliqués (bien sûr, vous n'utiliser que des opérateurs surchargés en mode débogage, d'accord) Gardez-le dans votre portée de classe.

Une autre manière intelligente consiste à utiliser auto_ptr. Le pointeur que vous voulez vous assurer que vous avez supprimé est stocké dans un objet du modèle auto_ptr sur la pile. Donc, quand cet objet sort de la portée, il prend le pointeur avec lui.

Si vous êtes toujours préoccupé par les fuites, essayez d'utiliser windbg. C'est un outil génial qui vous aide à identifier les fuites de mémoire. J'ai trouvé très efficace de trouver des fuites causées par des poignées.

+0

+1 pour l'affichage des pointeurs intelligents. –

0

Je cherchais un outil similaire pour VC++ 2003 et suis tombé sur MemoryChecker par Software Verify (www.softwareverify.com). Pas gratuit, mais à un prix très raisonnable (moins de Purifier et Bounds Checker). Je l'évalue toujours, mais les parties que j'ai utilisées sont très impressionnantes. Essai gratuit de 30 jours.

Vous pouvez suivre les erreurs de mémoire (supprimer au lieu de supprimer [], etc.), fuite de mémoire, points chauds de la mémoire, etc ... ne rien avoir utilisé comme ça avant, je trouve qu'il est assez cool :)

0

Il existe une classe utilitaire (gratuite) sur CodeProject qui peut aider avec Memory Leak Detection. Je l'ai trouvé très utile lorsque je travaillais avec du code hérité plein de fuites de mémoire.

Pour éviter les fuites dans le nouveau code en utilisant auto_ptr et RAAI en général est la voie à suivre.

Questions connexes