_CrtSetAllocHook
クライアントの定義する割り当て関数を C ランタイム デバッグのメモリ割り当てプロセスにフックして組み込みします (デバッグ バージョンだけ)。
_CRT_ALLOC_HOOK _CrtSetAllocHook(
_CRT_ALLOC_HOOK allocHook
);
パラメーター
- allocHook
C ランタイム デバッグのメモリ割り当てプロセスに新しくフックする、クライアントの定義する割り当て関数。
戻り値
前回定義された割り当てフック関数を返します。allocHook が NULL の場合は、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 を返す必要があります。 TRUE が返されると、フック関数を発生させた元の割り当て操作が実行されます。 このように実装すると、フック関数は現在の割り当て操作やデバッグ ヒープの状態に干渉せずに、割り当て情報の収集および保存を行います。このため、後で分析を行うことができます。
呼び出された割り当て操作が失敗したかのようにして、メインの割り当てプロセスを継続させるには、フック関数が FALSE を返す必要があります。 このように実装すると、フック関数はさまざまなメモリの使用状況やデバッグ ヒープの状態をシミュレートして、アプリケーションが各状況を処理する方法をテストできます。
フック関数をクリアするには、NULL を _CrtSetAllocHook に渡します。
他のメモリ管理関数と連携した _CrtSetAllocHook の使い方の詳細と、クライアント定義のフック関数を作成する方法の詳細については、「デバッグ用フック関数の作成」を参照してください。
注意
_CrtSetAllocHook は /clr:pure でサポートされません。
必要条件
ルーチン |
必須ヘッダー |
---|---|
_CrtSetAllocHook |
<crtdbg.h> |
互換性の詳細については、「C ランタイム ライブラリ」の「互換性」を参照してください。
ライブラリ
C ランタイム ライブラリのデバッグ バージョンのみ。
使用例
_CrtSetAllocHook の使用例については、「crt_dbg2」を参照してください。
同等の .NET Framework 関数
該当なし標準 C 関数を呼び出すには、PInvoke を使用します。詳細については、「プラットフォーム呼び出しの例」を参照してください。