_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.