共用方式為


_CrtSetAllocHook

安裝用戶端定義的配置函式,藉由將它連接到 c 執行階段偵錯記憶體配置處理序 (偵錯版本)。

_CRT_ALLOC_HOOK _CrtSetAllocHook(
   _CRT_ALLOC_HOOK allocHook 
);

參數

  • allocHook
    要連結到 c 執行階段偵錯記憶體配置的處理程序的新用戶端定義的配置函式。

傳回值

傳回先前定義的配置攔截函式中,或NULL如果allocHook是NULL。

備註

_CrtSetAllocHook允許應用程式本身配置函式與檔案相連 c 執行階段偵錯程式庫的記憶體配置的處理程序。 如此一來,每次呼叫偵錯配置函式配置,重新配置,或釋放記憶體區塊引動程序呼叫的應用程式攔截函式。 _CrtSetAllocHook應用程式提供簡單的方法來測試應用程式如何處理記憶體不足的情況下,能夠檢查配置模式,以及記錄供稍後分析的配置資訊的機會。 當 _DEBUG 尚未定義,會呼叫_CrtSetAllocHook在前置處理過程中移除。

_CrtSetAllocHook函式會安裝新的用戶端定義的配置函式中指定allocHook ,並傳回先前定義的攔截函式。 下列範例會示範如何用戶端定義配置攔截程序原型應:

int YourAllocHook( int allocType, void *userData, size_t size, int 
blockType, long requestNumber, const unsigned char *filename, int 
lineNumber);

allocType引數會指定配置運算的型別(_HOOK_ALLOC, _HOOK_REALLOC,以及_HOOK_FREE) 所觸發的配置攔截函式的呼叫。 當觸發的配置類型是_HOOK_FREE, userData是使用者資料] 區段中即將要釋放記憶體區塊的指標。 不過,當觸發的配置類型是_HOOK_ALLOC或_HOOK_REALLOC, userData是NULL因為記憶體區塊尚未配置。

size指定的記憶體大小封鎖,以位元組為單位, blockType指示記憶體區塊類型requestNumber為物件配置順序數目的記憶體區塊中,而且,如果可能的話filename和lineNumber指定來源檔名和行號觸發配置操作啟動的地方。

攔截函式處理完成之後,它必須傳回布林值,取得如何繼續的主要的 c 執行階段配置處理序。 當攔截函式想主要配置處理序中,以繼續進行,如果攔截函式必須永遠不會被呼叫,那麼攔截函式應該會傳回TRUE。 這會導致執行原始觸發配置作業。 使用此實作,攔截函式可以收集並儲存配置資訊,供稍後分析,而不影響目前的配置作業或偵錯堆積的狀態。

當攔截函式想主要配置處理序中,如果觸發配置操作所呼叫,然後結果失敗,請再攔截函式應該返回繼續FALSE。 使用這項實作,攔截函式可以模擬大範圍的記憶體容量和偵錯堆積的狀態,以測試應用程式如何處理每一種狀況。

若要清除攔截函式,傳遞NULL到_CrtSetAllocHook。

如需有關如何_CrtSetAllocHook可以搭配其他記憶體管理功能或撰寫您自己的用戶端定義的勾點函式,請參閱撰寫您自己偵錯攔截函式

注意事項注意事項

_CrtSetAllocHook不支援/clr:pure。

需求

常式

所需的標頭

_CrtSetAllocHook

<crtdbg.h>

如需相容性資訊,請參閱相容性在簡介中。

文件庫

偵錯版本的 C 執行階段程式庫只。

範例

範例中,如何使用_CrtSetAllocHook,請參閱 crt_dbg2

.NET Framework 對等用法

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

請參閱

參考

偵錯常式

_CrtGetAllocHook