_CrtSetBreakAlloc
指定されたオブジェクト割り当て順序番号にブレークポイントを設定します (デバッグ バージョンのみ)。
long _CrtSetBreakAlloc( long lBreakAlloc );
パラメーター
- lBreakAlloc
ブレークポイントを設定する割り当て順序番号。
戻り値
ブレークポイントが設定されていた、以前のオブジェクト割り当て順序番号を返します。
解説
_CrtSetBreakAlloc を使用すると、アプリケーションはメモリ割り当ての特定の位置でブレークし、要求元をさかのぼって調べることにより、メモリ リークの検出を実行できます。 関数は、メモリ ブロックがヒープ上に割り当てられたときに決められた、シーケンシャルなオブジェクト割り当て順序番号を使用します。 _DEBUG が未定義の場合、_CrtSetBreakAlloc の呼び出しはプリプロセスで削除されます。
オブジェクト割り当て順序番号は、Crtdbg.h で定義されている _CrtMemBlockHeader 構造体の lRequest フィールドに格納されます。 いずれかのデバッグ ダンプ関数を使用してメモリ ブロックの情報を出力すると、この番号が {36} のように中かっこで囲まれて表示されます。
_CrtSetBreakAlloc を他のメモリ管理関数と共に使用する方法の詳細については、「ヒープ割り当て要求を追跡する」を参照してください。 デバッグ バージョンのベース ヒープに対するメモリ ブロックの割り当て、初期化、管理方法の詳細については、「CRT デバッグ ヒープ」を参照してください。
必要条件
ルーチン |
必須ヘッダー |
---|---|
_CrtSetBreakAlloc |
<crtdbg.h> |
互換性の詳細については、「C ランタイム ライブラリ」の「互換性」を参照してください。
ライブラリ
C ランタイム ライブラリのデバッグ バージョンのみ。
使用例
// crt_setbrkal.c
// compile with: -D_DEBUG /MTd -Od -Zi -W3 /c /link -verbose:lib -debug
/*
* In this program, a call is made to the _CrtSetBreakAlloc routine
* to verify that the debugger halts program execution when it reaches
* a specified allocation number.
*/
#include <malloc.h>
#include <crtdbg.h>
int main( )
{
long allocReqNum;
char *my_pointer;
/*
* Allocate "my_pointer" for the first
* time and ensure that it gets allocated correctly
*/
my_pointer = malloc(10);
_CrtIsMemoryBlock(my_pointer, 10, &allocReqNum, NULL, NULL);
/*
* Set a breakpoint on the allocation request
* number for "my_pointer"
*/
_CrtSetBreakAlloc(allocReqNum+2);
/*
* Alternate freeing and reallocating "my_pointer"
* to verify that the debugger halts program execution
* when it reaches the allocation request
*/
free(my_pointer);
my_pointer = malloc(10);
free(my_pointer);
my_pointer = malloc(10);
free(my_pointer);
}
同等の .NET Framework 関数
該当なし。標準 C 関数を呼び出すには、PInvoke を使用します。詳細については、「プラットフォーム呼び出しの例」を参照してください。