Partager via


_CrtMemDifference

Compare deux états mémoire et retourne leurs différences (version Debug uniquement).

int _CrtMemDifference( 
   _CrtMemState *stateDiff,
   const _CrtMemState *oldState,
   const _CrtMemState *newState 
);

Paramètres

  • stateDiff
    Pointeur vers une structure _CrtMemState utilisée pour stocker les différences entre les deux états de mémoire (retourné).

  • oldState
    Pointeur vers un état antérieur de mémoire (structure _CrtMemState ).

  • newState
    Pointeur vers un état de mémoire postérieur (structure _CrtMemState ).

Valeur de retour

Si les états de mémoire sont sensiblement différents, _CrtMemDifference retourne TRUE. Sinon, la fonction retourne FALSE.

Notes

La fonction _CrtMemDifference compare oldState et newState et stocke leurs différences dans stateDiff, qui peut ensuite être utilisé par l'application de détection des fuites de mémoire et des autres problèmes de mémoire. Lorsque _DEBUG n'est pas défini, les appels à _CrtMemDifference sont supprimés pendant le prétraitement.

newState et oldState doivent tous deux être un pointeur valide à une structure _CrtMemState, définie dans Crtdbg.h, effectué par _CrtMemCheckpoint avant d'appeler _CrtMemDifference. stateDiff doit être un pointeur vers une instance précédemment allouée de la structure _CrtMemState. Si stateDiff ou newState ou oldState sont NULL , le gestionnaire de paramètres non valides est appelé, comme décrit dans Validation de paramètre. Si l'exécution est autorisée à se poursuivre, ces fonctions définissent errno, _doserrno, _sys_errlist et _sys_nerr avec la valeur EINVAL et la fonction retourne FALSE.

_CrtMemDifference compare les valeurs du champ _CrtMemState aux blocs dans oldState à elles dans newState et stocke le résultat dans stateDiff. Lorsque le nombre de types de blocs alloué ou le nombre total de blocs alloués pour chaque type diffère entre les deux états de mémoire, les états sont dits sensiblement différents. La différence entre la plus grande quantité jamais allouée immédiatement pour les deux états et la différence entre les allocations totales pour les deux états sont également stockées dans stateDiff.

Par défaut, les blocs internes du runtime C (_CRT_BLOCK) ne sont pas inclus dans les opérations d'état mémoire. La fonction _CrtSetDbgFlag peut être utilisée pour mettre à 1 le bit _CRTDBG_CHECK_CRT_DF de _crtDbgFlag pour inclure ces blocs à la détection des fuites et d'autres opérations d'état de mémoire. Les blocs de mémoire libérés (_FREE_BLOCK) n'entraîne pas le retour de TRUE par _CrtMemDifference.

Pour plus d'informations sur les fonctions d'état du tas et la structure de _CrtMemState, consultez Fonctions de création de rapports d'état du tas. Pour obtenir des informations sur la façon dont les blocs de mémoire sont alloués, initialisés, et gérés dans la version Debug du tas de base, consultez Détails du tas de débogage CRT.

Configuration requise

Routine

En-tête requis

En-tête facultatif

_CrtMemDifference

<crtdbg.h>

<errno.h>

Pour plus d'informations sur la compatibilité, consultez Compatibilité dans l'introduction.

Bibliothèques : Versions Debug de Fonctions des bibliothèque CRT uniquement.

Exemple

Consultez crt_dbg1.

Équivalent .NET Framework

Non applicable. Pour appeler la fonction C standard, utilisez PInvoke. Pour plus d'informations, consultez Exemples d'appel de code non managé.

Voir aussi

Référence

Routines de débogage

_crtDbgFlag