建議使用 Visual Studio 2017

_CrtMemDifference

 

如需 Visual Studio 2017 的最新文件請參閱 Visual Studio 2017 文件

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

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

參數

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

oldState
較舊記憶體狀態 (_CrtMemState 結構) 的指標。

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

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

_CrtMemDifference 函式會比較 oldStatenewState 並將其差異儲存在 stateDiff中,以供應用程式稍後用來偵測記憶體流失和其他記憶體問題。 未定義 _DEBUG 時,會在前置處理期間移除 _CrtMemDifference 的呼叫。

newStateoldState必須是有效的指標來_CrtMemState結構,定義在 crtdbg.h 裡,已經由填入_CrtMemCheckpoint之前,先呼叫_CrtMemDifferencestateDiff必須是先前配置的執行個體的指標_CrtMemState結構。 如果stateDiffnewState,或oldStateNULL、 無效參數處理常式叫用時,所述參數驗證。 若要繼續,允許執行errno、 _doserrno、 _sys_errlist 和 _sys_nerr設為EINVAL和函式會傳回 FALSE。

_CrtMemDifference比較_CrtMemState欄位值的區塊oldStatenewState,並將結果stateDiff。 當兩個記憶體狀態中的已配置區塊類型數目或配置給每種類型的區塊總數不同時,表示這兩個狀態有很大的差異。 曾經配置給這兩個狀態的最大數量之間的差異,以及配置給這兩個狀態的總數之間的差異也會儲存在 stateDiff中。

根據預設,內部 C 執行階段區塊 (_CRT_BLOCK) 不會包含在記憶體狀態作業中。 _CrtSetDbgFlag 函式來開啟 _CRTDBG_CHECK_CRT_DF_crtDbgFlag 位元,以將這些區塊包含在流失偵測和其他記憶體狀態作業中。 已釋放的記憶體區塊 (_FREE_BLOCK) 不會使 _CrtMemDifference 傳回 TRUE。

如需堆積狀態函式和 _CrtMemState 結構的詳細資訊,請參閱 Heap State Reporting Functions前填入。 如需在偵錯版之基底堆積中如何配置、初始化及管理記憶體區塊的資訊,請參閱 CRT Debug Heap Details

常式必要的標頭選擇性標頭
_CrtMemDifference<crtdbg.h><errno.h>

如需更多的相容性資訊,請參閱<簡介>中的 Compatibility

程式庫︰偵錯版本的CRT 程式庫功能只。

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

偵錯常式
_crtDbgFlag

顯示: