共用方式為


_CrtMemDifference

比較兩個記憶體狀態並傳回兩者的差異 (僅偵錯版本)。

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

參數

  • stateDiff
    用於儲存兩個記憶體狀態之間差異的 _CrtMemState 結構的指標 (傳回)。

  • oldState
    對應至舊版的記憶體狀態的指標 (_CrtMemState 結構)。

  • newState
    為最新記憶體狀態的指標 (_CrtMemState 結構)。

傳回值

如果記憶體狀態明顯不同,_CrtMemDifference 則傳回 true。 否則,函式會傳回 false。

備註

_CrtMemDifference函式比較oldState和newState,並將兩者之間的差異儲存於stateDiff,其可以由應用程式用於偵測記憶體遺漏和其他記憶體問題。 如果未定義 _DEBUG,在前置處理中,對 _CrtMemDifference 的呼叫將被移除。

newState 和 oldState 都必須個別是 _CrtMemState 結構的有效指標,其定義於 Crtdbg.h,並由呼叫 _CrtMemDifference之前的 _CrtMemCheckpoint 所填入。 stateDiff 必須是先前配置的 _CrtMemState 結構的執行個體之指標。 如果 stateDiff 、newState或oldState之一為NULL,則會叫用無效參數處理常式,如參數驗證中所述。 如果允許繼續執行,errno、_doserrno、_sys_errlist 和 _sys_nerr 則設為 EINVAL且此函示傳回FALSE。

_CrtMemDifference比較oldState區塊與newState區塊中的**_CrtMemState** 欄位值,並儲存結果於stateDiff。 當配置區塊類型數目或每種型別配置區塊總數不同於這兩種記憶體狀態時,狀態視為明顯不同。 兩種狀態的最大量配置之間的差異,與兩種狀態的全部配置之間的差異也都會儲存於stateDiff中。

根據預設,內部 C 執行階段區塊 (_CRT_BLOCK) 不包含在記憶體狀態作業。 _CrtSetDbgFlag函式可用於開啟**_crtDbgFlag_CRTDBG_CHECK_CRT_DF位元在遺漏檢測和其他記憶體狀態作業包括這些區塊。 釋放的記憶體區塊 (_FREE_BLOCK**) 不會使 _CrtMemDifference 傳回TRUE。

如需堆積狀態的函式和 _CrtMemState 結構的詳細資訊,請參閱 堆積狀態回報函式。 如需記憶體區塊配置、初始化的方式,並在基底堆積的偵錯版本管理記憶體區塊的詳細資訊,請參閱 CRT 偵錯堆積詳細資料

需求

常式

必要的標頭

選擇性標頭

_CrtMemDifference

<crtdbg.h>

<errno.h>

如需詳細資訊,請參閱介紹中的 相容性

程式庫:CRT 程式庫功能 之偵錯版本。

範例

請參閱 crt_dbg1

.NET Framework 對等用法

不適用。若要呼叫標準 C 函式,請使用 PInvoke。如需詳細資訊,請參閱平台叫用範例

請參閱

參考

偵錯常式

_crtDbgFlag