Partager via


Utilisation de la version debug pour vérifier les remplacements de mémoire

Pour utiliser la build de débogage pour vérifier le remplacement de la mémoire, vous devez d’abord reconstruire votre projet pour le débogage. Ensuite, accédez au début de la fonction de InitInstance votre application et ajoutez la ligne suivante :

afxMemDF |= checkAlwaysMemDF;

L’allocateur de mémoire de débogage place les octets de protection autour de toutes les allocations de mémoire. Toutefois, ces octets de protection ne font aucun bon, sauf si vous vérifiez s’ils ont été modifiés (ce qui indiquerait un remplacement de mémoire). Dans le cas contraire, cela fournit simplement une mémoire tampon qui peut, en fait, vous permettre de vous débarrasser d’un remplacement de mémoire.

En activant le checkAlwaysMemDFMFC, vous forcerez MFC à passer un appel à la AfxCheckMemory fonction chaque fois qu’un appel à new ou delete est effectué. Si un remplacement de mémoire a été détecté, il génère un message TRACE semblable à ce qui suit :

Damage Occurred! Block=0x5533

Si vous voyez l’un de ces messages, vous devez parcourir votre code pour déterminer où les dommages se sont produits. Pour isoler plus précisément l’endroit où le remplacement de la mémoire s’est produit, vous pouvez effectuer des appels explicites à AfxCheckMemory vous-même. Par exemple :

ASSERT(AfxCheckMemory());
    DoABunchOfStuff();
    ASSERT(AfxCheckMemory());

Si la première ASSERTION réussit et que la seconde échoue, cela signifie que le remplacement de mémoire doit se produire dans la fonction entre les deux appels.

Selon la nature de votre application, vous pouvez constater que afxMemDF votre programme s’exécute trop lentement pour même tester. La afxMemDF variable est AfxCheckMemory appelée pour chaque appel à nouveau et supprimé. Dans ce cas, vous devez disperser vos propres appels à AfxCheckMemory( ) comme indiqué ci-dessus, et essayer d’isoler la mémoire de cette façon.

Voir aussi

Résolution de problèmes liés à la version Release