デバッグ バージョンのヒープ割り当て関数
更新 : 2007 年 11 月
このトピックの内容は、次の製品に該当します。
Edition |
Visual Basic |
C# |
C++ |
Web Developer |
---|---|---|---|---|
Express |
ネイティブのみ |
|||
Standard |
ネイティブのみ |
|||
Pro/Team |
ネイティブのみ |
表の凡例 :
対象 |
|
該当なし |
|
既定で非表示のコマンド |
C ランタイム ライブラリには、デバッグ バージョンの特殊なヒープ割り当て関数があります。これらの関数は、リリース バージョンの関数名の末尾に "_dbg" を追加した名前になっています。ここでは、CRT 関数のリリース バージョンと _dbg バージョンとの相違点について、malloc と _malloc_dbg を例にして説明します。
_DEBUG が定義されている場合、CRT はすべての malloc 呼び出しを _malloc_dbg に置き換えます。したがって、malloc の代わりに _malloc_dbg を使用するようにコードを書き直さなくても、デバッグ中は _malloc_dbg を利用できます。
しかし、明示的に _malloc_dbg を呼び出すこともできます。明示的に _malloc_dbg を呼び出すと、さらに次の利点があります。
_CLIENT_BLOCK 型の割り当てを追跡できます。
割り当て要求が発生したソース ファイルと行番号を格納できます。
malloc 呼び出しを _malloc_dbg 呼び出しに変換せずに、ソース ファイル情報を取得するには、_CRTDBG_MAP_ALLOC を定義します。これにより、malloc のラッパーを利用するのではなく、プリプロセッサがすべての malloc 呼び出しを直接 _malloc_dbg に置き換えます。
クライアント ブロック内の個々の割り当て型を追跡するには、blockType パラメータを _CLIENT_BLOCK に設定して、直接 _malloc_dbg を呼び出す必要があります。
_DEBUG が定義されていない場合は、malloc 呼び出しはそのままですが、_malloc_dbg 呼び出しは malloc に変換されます。また、_CRTDBG_MAP_ALLOC が定義されていても無視されるため、割り当て要求に関連するソース ファイル情報を取得することはできません。malloc にはブロック型を指定するパラメータがないため、_CLIENT_BLOCK 型への割り当て要求は標準の割り当てとして扱われます。