_CrtSetAllocHook

C ランタイム デバッグ メモリ割り当てプロセスにフックして、クライアント定義割り当て関数をインストールします (デバッグ バージョンのみ)。

構文

_CRT_ALLOC_HOOK _CrtSetAllocHook(
   _CRT_ALLOC_HOOK allocHook
);

パラメーター

allocHook
C ランタイム デバッグ メモリ割り当てプロセスにフックする新しいクライアント定義割り当て関数。

戻り値

以前に定義された割り当てフック関数を返します。NULLallocHook の場合は、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_REALLOC割り当てのフック関数の呼び出しをトリガーした割り当て操作 (_HOOK_ALLOC、および_HOOK_FREE) の種類を指定します。 トリガーする割り当ての種類が _HOOK_FREE である場合、userData は解放されるメモリ ブロックのユーザー データ セクションへのポインターです。 ただし、トリガー割り当ての種類が or _HOOK_REALLOCの場合は_HOOK_ALLOCNULLuserDataメモリ ブロックがまだ割り当てられていないためです。

size はメモリ ブロックのサイズをバイト数で指定します。blockType はメモリ ブロックの種類を示します。requestNumber はメモリ ブロックのオブジェクト割り当て順序番号です。また、filenamelineNumber を使用できる場合、これらはトリガーする割り当て操作が開始されたソース ファイル名と行番号を指定します。

フック関数は処理の完了後、続行方法を主要な C ランタイム割り当てプロセスに伝えるブール値を返す必要があります。 フック関数は、フック関数が呼び出されていないかのようにメイン割り当てプロセスを続行する必要がある場合、フック関数が返TRUEされます。これにより、元のトリガー割り当て操作が実行されます。 フック関数は、デバッグ ヒープの現在の割り当て操作または状態を妨げることなく、後で分析するために割り当て情報を収集して保存できます。

トリガーする割り当て操作が呼び出されて失敗したかのように主要な割り当てプロセスが続行されるようにする場合、フック関数は FALSE を返す必要があります。 フック関数は、さまざまなメモリ条件とデバッグ ヒープの状態をシミュレートして、アプリケーションが各状況をどのように処理するかをテストできます。

フック関数をクリアするには、NULL_CrtSetAllocHook を渡します。

他のメモリ管理機能で使用する方法_CrtSetAllocHook、または独自のクライアント定義フック関数を記述する方法の詳細については、「デバッグ フック関数の記述」を参照してください

Note

_CrtSetAllocHookは /clr:pure ではサポートされていません。 /clr:pure および /clr:safe コンパイラ オプションは Visual Studio 2015 では非推奨とされており、Visual Studio 2017 で削除されました。

必要条件

ルーチンによって返される値 必須ヘッダー
_CrtSetAllocHook <crtdbg.h>

互換性の詳細については、「 Compatibility」を参照してください。

ライブラリ

C ランタイム ライブラリのデバッグ バージョンのみ。

_CrtSetAllocHook の使用方法のサンプルについては、「crt_dbg2」を参照してください。

関連項目

デバッグ ルーチン
_CrtGetAllocHook