BOOL AfxCheckMemory ( );
Valeur de retour
Différent de zéro si aucune erreur de mémoire ; sinon 0.
Remarques
Cette fonction valide le pool de mémoire libre et imprime les messages d'erreur comme l'exige. Si la fonction ne détecte aucune corruption de la mémoire, elle n'imprime rien.
Tous les blocs de mémoire actuellement allouées sur le tas sont vérifiés, y compris ceux affectés par la nouvelle mais pas ceux alloués par les appels directs d'allocateurs de mémoire sous-jacente, comme la fonction malloc ou la fonction Windows GlobalAlloc . Si un bloc est endommagé, un message est imprimé à la sortie du débogueur.
Si vous incluez la ligne
# define DEBUG_NEW nouveau
dans un module de programme, puis les appels ultérieurs à AfxCheckMemory montrent le nombre de nom de fichier et la ligne où la mémoire a été allouée.
&Notenbsp ; Si votre module contient un ou plusieurs implémentations des classes sérialisables, alors vous devez mettre la #define ligne après le dernier appel de macro IMPLEMENT_SERIAL.
Cette fonction ne fonctionne que dans la version Debug des MFC.
Exemple
/ / exemple pour AfxCheckMemory
CAge * pcage = &nouvelle CAge (21); nbsp ; / / CAge est dérivée de CObject.
Âge * page = new Age (22) ; / / L'âge n'est pas dérivée de CObject.
*(((char*) pcage) - 1) = 99 ; / / Corrompre octets de garde précédent
page de *(((char*)) - 1) = 99 ; / / Corrompre octets de garde précédent
AfxCheckMemory()
Voici les résultats du programme:
erreur de vérification de mémoire à $0067495F = $63, devrait être $FD
DOMMAGES : Avant le bloc Non-objet à $00674960
Non-objet alloué au fichier test02.cxx(48)
Non-objet situé à $00674960 est longues de 2 octets
erreur de vérification de mémoire à $00674905 = $63, devrait être $FD
DOMMAGES : Avant le bloc objet à $00674906
Objet alloué au fichier test02.cxx(47)
Objet situé à 00674906 $ est de 6 octets de longs