Condividi tramite


_CrtMemDifference

Confronta due stati della memoria e restituisce le differenze (solo versione di debug).

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

Parametri

  • stateDiff
    Puntatore a una struttura _CrtMemState utilizzata per archiviare le differenze tra i due stati della memoria (ritornati).

  • oldState
    Puntatore a uno stato precedente di memoria (struttura di**_CrtMemState** ).

  • newState
    Puntatore a uno stato successivo di memoria (struttura di**_CrtMemState** ).

Valore restituito

Se gli stati di memoria sono molto diversi, _CrtMemDifference ritorna TRUE. In caso contrario, la funzione restituirà FALSE.

Note

La funzione _CrtMemDifference confronta oldState e newState e archivia le differenze in stateDiff, le quali possono essere utilizzate dall'applicazione per rilevare perdite di memoria e altri problemi di memoria. Quando _DEBUG non è definito, le chiamate a _CrtMemDifference vengono rimosse durante la pre-elaborazione.

newState e oldState devono entrambi essere puntatori validi a una struttura _CrtMemState, definita in Crtdbg.h, che è stata riempita da _CrtMemCheckpoint prima della chiamata di _CrtMemDifference. stateDiff deve essere un puntatore a un'istanza precedentemente allocata della struttura _CrtMemState. Se stateDiff o newState, o oldState è NULL, viene invocato il gestore di parametri non validi, come descritto in Convalida dei parametri. Se all'esecuzione è permesso continuare, errno, _doserrno, _sys_errlist, and _sys_nerr viene impostato su EINVAL e la funzione restituisce FALSE.

_CrtMemDifference confronta i valori del campo _CrtMemState dei blocchi in oldState con quelli in newState e archivia il risultato in stateDiff. Quando il numero di tipi di blocco allocati o il numero complessivo di blocchi allocati per ogni tipo differisce tra i due stati della memoria, gli stati si dicono essere significativamente diversi. La differenza tra la più grande quantità di memoria allocata una volta per i due stati e la differenza tra allocazioni totali per i due stati vengono anche archiviate in stateDiff.

Per impostazione predefinita, i blocchi interni di runtime C (_CRT_BLOCK) non sono inclusi nelle operazioni dello stato della memoria. La funzione _CrtSetDbgFlag può essere utilizzata per attivare il bit _CRTDBG_CHECK_CRT_DF di _crtDbgFlag per includere questi blocchi nel rilevamento di perdite e altre operazioni dello stato della memoria. I blocchi di memoria liberati (_FREE_BLOCK) non fanno restituire il valore TRUE da _CrtMemDifference.

Per ulteriori informazioni sulle funzioni di stato dell'heap e la struttura _CrtMemState, vedere Funzioni per la creazione di report sullo stato dello heap. Per informazioni su come i blocchi di memoria allocati, vengono inizializzati e vengono gestiti nella versione di debug dell'heap di base, vedere Informazioni dettagliate sull'heap di debug CRT.

Requisiti

Routine

Intestazione obbligatoria

Intestazione facoltativa

_CrtMemDifference

<crtdbg.h>

<errno.h>

Per ulteriori informazioni sulla compatibilità, vedere Compatibilità.

Librerie: Versioni di debug solo di Funzionalità libreria CRT.

Esempio

Vedere crt_dbg1.

Equivalente .NET Framework

Non applicabile. Per chiamare la funzione standard C, utilizzare PInvoke. Per ulteriori informazioni, vedere Esempi di platform invoke.

Vedere anche

Riferimenti

Routine di debug

_crtDbgFlag