_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
を他のメモリ管理機能と共に使用する方法、または独自のクライアント定義フック関数を記述する方法の詳細については、Debug フック関数の記述を参照してください。
Note
_CrtSetAllocHook
は、 /clr:pure ではサポートされていません。 /clr:pure および /clr:safe コンパイラ オプションは Visual Studio 2015 では非推奨とされており、Visual Studio 2017 で削除されました。
要件
ルーチンによって返される値 | 必須ヘッダー |
---|---|
_CrtSetAllocHook |
<crtdbg.h> |
互換性の詳細については、「 Compatibility」を参照してください。
ライブラリ
C ランタイム ライブラリのデバッグ バージョンのみ。
例
_CrtSetAllocHook
の使用方法のサンプルについては、「crt_dbg2
」を参照してください。