_CrtSetAllocHook
C ランタイムのデバッグ メモリの割り当てのプロセス (デバッグ バージョンだけ) にフックすることによりクライアント定義された割り当て関数をインストールします。
_CRT_ALLOC_HOOK _CrtSetAllocHook(
_CRT_ALLOC_HOOK allocHook
);
パラメーター
- allocHook
C ランタイムのデバッグ メモリの割り当てのプロセスにフックに新しいクライアント定義された割り当て関数。
戻り値
allocHook が NULL 場合上記で定義した割り当て用のフック関数または NULL を返します。
解説
15_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 メモリ ブロックの割り当て順序番号です (存在する場合)および filenamelineNumber はの操作が始まるソース ファイル名と行番号を指定します。
フック関数は処理を完了したら次の方法をメイン C に実行時の配分かを示すブール値を返す必要があります。このフック関数で呼び出される済みのフック関数はメインの使用中に対応するときにフック関数を TRUE を返す必要があります。これにより元のトリガーの操作を実行します。この実装を使用してフック関数はデバッグ ヒープの現在の割り当て操作または状態に干渉せずに後で分析するための情報を収集格納できます。
トリガーの操作とというようにフック関数がメインの使用中にエラーが発生した場合は対応するフック関数は FALSE を返す必要があります。この実装を使用してフック関数はメモリ不足の状態をシミュレートするすべてのアプリケーションが終了処理をどのように処理するかをテストするヒープ状態をデバッグできます。
フック関数をクリアするには_CrtSetAllocHook に NULL を渡します。
_CrtSetAllocHook が別のメモリ管理関数を使用すると独自のクライアント定義フック関数の記述方法の詳細については使用できるか 独自のデバッグのフック関数を記述できます。 を参照してください。
[!メモ]
_CrtSetAllocHook は /clr:pure でサポートされていません。
必要条件
ルーチン |
必須ヘッダー |
---|---|
_CrtSetAllocHook |
<crtdbg.h> |
互換性の詳細については、「C ランタイム ライブラリ」の「互換性」を参照してください。
ライブラリ
C ランタイム ライブラリのデバッグ バージョンのみ。
使用例
_CrtSetAllocHook を使用する方法の例については crt_dbg2 を参照してください。
同等の .NET Framework 関数
該当なし標準 C 関数を呼び出すには、PInvoke を使用します。詳細については、「プラットフォーム呼び出しの例」を参照してください。