C ++ - Test de fuite de mémoire avec _CrtDumpMemoryLeaks () - Ne pas afficher les numéros de ligne
Je suis en train de travailler sur un jeu avec la SDL dans Visual Studio 2010. Je suis tombé sur le _CrtDumpMemoryLeaks()
macro et j'ai pensé lui donner un aller. Invoquant _CrtDumpMemoryLeaks()
ne imprimer des fuites de mémoire dans la fenêtre de sortie, mais il n'indique pas où il arrive.
J'ai lu l'article de MSDN à Détection Fuite De Mémoire Permettant et il explique que si j'définir _CRTDBG_MAP_ALLOC
il devrait sortir le numéro de ligne de la fausse déclaration. Cela ne se produit pas dans mon cas. (J'ai été en mesure de le faire fonctionner, si j'utilise la fonction malloc() directement (et non par l'utilisation de 'nouveau').
Le code:
#define _CRTDBG_MAP_ALLOC
#include <crtdbg.h>
#include <stdlib.h>
int main(int argc, char *argv[]) {
int *var = new int(5);
_CrtDumpMemoryLeaks();
return 0;
}
Le résultat est le suivant:
Detected memory leaks!
Dumping objects ->
{58} normal block at 0x007D1510, 4 bytes long.
Data: < > 05 00 00 00
Object dump complete.
Si _CrtDumpMemoryLeaks()
est incapable de sortie des numéros de ligne lors de l'attribution de l'aide "nouveau" puis des suggestions pour d'autres façons d'obtenir un comportement similaire est appréciée.
source d'informationauteur John
Vous devez vous connecter pour publier un commentaire.
Lorsque vous définissez _DEBUG et comprennent
<crtdbg.h>
vous obtenez une surchargeoperator new
qui prend des paramètres supplémentaires que vous pouvez utiliser pour spécifier le fichier et le numéro de ligne dans le placementnew
expressions.E. g.
Vous pouvez envelopper ce dans une condition définie macro, par exemple
Pendant que vous faites de voir des gens à la définition d'une macro
new
pour cacher complètement cette forme de code client, je ne suis pas personnellement recommander comme il se casse quelque chose de déjà intentionnellement à l'aide de placement de nouvelles et que vous avez à faire assurez-vous que les en-têtes à l'aide de placement de nouvelles (comme la plupart des en-têtes standard) sont inclus avant tout d'en-tête de la redéfinition denew
. Cela peut le rendre facile de laisser certains inline utilise denew
dans les fichiers d'en-tête passer à travers sans être ajusté'.C'est une vieille version de Visual Détecteur de Fuite.
Essayez ceci: http://vld.codeplex.com/
Vous pouvez avoir besoin de ces définit après votre comprend
Découvrez le morceau de code.
La surcharge de nouvel opérateur et l'opérateur delete pour un journal de toutes les allocations de mémoire et deallocations
J'ai identifié mon fuites de mémoire à l'aide de cette méthode.
La accepté de répondre par Charles Bailey vous demande de changer votre code source, et ce n'est pas nécessaire. Si vous utilisez
new
etdelete
(ou le tableau des versions), tout ce que vous devez faire est de placer ce bout de code dans lestdafx.h
dossier de chacun de vos projets (y compris de l'électricité statique ou dynamique dépendances de la bibliothèque), et il donnera alors un fichier source et le numéro de la ligne de joint à chaque fuite de mémoire de l'objet:Cela vient directement à partir de Microsoft page web sur la question.