_CrtMemDifference

 

Date de publication : novembre 2016

Pour la documentation la plus récente de Visual Studio 2017 RC, consultez Documentation RC de Visual Studio 2017.

Compare deux états de la 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 deux états de la mémoire (retourné).

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

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

Si les états de la mémoire sont très différents, _CrtMemDifference retourne la valeur TRUE. Dans le cas contraire, la fonction retourne FALSE.

La fonction _CrtMemDifference compare oldState et newState, puis stocke leurs différences dans stateDiff, qui peut ensuite être utilisé par l’application pour détecter les fuites de mémoire et autres problèmes liés à cette dernière. Quand _DEBUG n’est pas défini, les appels à _CrtMemDifference sont supprimés durant le prétraitement.

newState et oldState doivent représenter chacun un pointeur valide vers une structure _CrtMemState, définie dans Crtdbg.h, qui a été rempli par _CrtMemCheckpoint avant l’appel de _CrtMemDifference.stateDiff doit être un pointeur vers une instance allouée au préalable de la structure _CrtMemState. Si stateDiff, newState ou oldState a la valeur 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, errno, _doserrno, _sys_errlist et _sys_nerr a la valeur EINVAL, et la fonction retourne la valeur FALSE.

_CrtMemDifference compare les valeurs de champ _CrtMemState des blocs de oldState à celles de newState, puis stocke le résultat dans stateDiff. Quand le nombre de types de bloc alloués ou le nombre total de blocs alloués pour chaque type diffère entre les deux états de la mémoire, ces états sont considérés comme très différents. La différence entre la quantité maximale allouée simultanément 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 runtime C internes (_CRT_BLOCK) ne sont pas inclus dans les opérations relatives à l’état de la mémoire. La fonction _CrtSetDbgFlag peut être utilisée pour activer la partie _CRTDBG_CHECK_CRT_DF de _crtDbgFlag afin d’inclure ces blocs dans la détection des fuites et les autres opérations relatives à l’état de la mémoire. Les blocs de mémoire libérés (_FREE_BLOCK) n’amènent pas _CrtMemDifference à retourner la valeur TRUE.

Pour plus d’informations sur les fonctions d’état du tas et la structure _CrtMemState, consultez Heap State Reporting Functions. Pour plus d’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.

RoutineEn-tête requisEn-tête facultatif
_CrtMemDifference<crtdbg.h><errno.h>

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

Bibliothèques : uniquement les versions Debug de Fonctions de bibliothèque CRT.

Non applicable. Pour appeler la fonction C standard, utilisez PInvoke. Pour plus d'informations, consultez Platform Invoke Examples.

Routines de débogage
_crtDbgFlag

Afficher: