方法 : デバッグ ヒープを使用する
更新 : 2007 年 11 月
このトピックの内容は、次の製品に該当します。
Edition |
Visual Basic |
C# |
C++ |
Web Developer |
---|---|---|---|---|
Express |
ネイティブのみ |
|||
Standard |
ネイティブのみ |
|||
Pro/Team |
ネイティブのみ |
表の凡例 :
対象 |
|
該当なし |
|
既定で非表示のコマンド |
malloc、free、calloc、realloc、new、delete などのヒープ関数の呼び出しは、すべてデバッグ ヒープで動作するデバッグ バージョンのヒープ関数に置き換えられます。メモリ ブロックが解放されると、デバッグ ヒープは割り当て領域の前後に確保されたバッファが完全かどうかを自動的にチェックし、それらのバッファが上書きされていた場合はエラーを出力します。
デバッグ ヒープを使用するには
- アプリケーションのデバッグ ビルドに C ランタイム ライブラリのデバッグ バージョンをリンクします。
_crtDbgFlag の 1 つ以上のビット フィールドを変更してフラグの新しい状態を作成するには
newFlag パラメータに _CRTDBG_REPORT_FLAG を設定して _CrtSetDbgFlag を呼び出すことによって、現在の _crtDbgFlag の状態を取得し、その値を一時変数に格納します。
この一時変数と、オンにするビットマスクとの OR (ビット演算子の |) 演算を行い、ビットをオンにします。ビットマスクは、アプリケーション コードの中ではマニフェスト定数で表されています。
一時変数と、オフにするビットマスクの NOT (ビット演算子の ~) との AND (ビット演算子の &) をとり、ビットをオフにします。
newFlag パラメータに一時変数に格納されている値を設定して _CrtSetDbgFlag を呼び出すことによって、_crtDbgFlag の新しい状態を作成します。
使用例
たとえば、次のコードは、メモリ リークの自動検出をオンにし、_CRT_BLOCK 型のブロックに関するチェックをオフにします。
// Get current flag
int tmpFlag = _CrtSetDbgFlag( _CRTDBG_REPORT_FLAG );
// Turn on leak-checking bit.
tmpFlag |= _CRTDBG_LEAK_CHECK_DF;
// Turn off CRT block checking bit.
tmpFlag &= ~_CRTDBG_CHECK_CRT_DF;
// Set flag to the new value.
_CrtSetDbgFlag( tmpFlag );