次の方法で共有


デバッグ バージョンのヒープ割り当て関数

C ランタイム ライブラリには、デバッグ バージョンの特殊なヒープ割り当て関数があります。これらの関数は、リリース バージョンの関数名の末尾に "_dbg" を追加した名前になっています。ここでは、CRT 関数のリリース バージョンと _dbg バージョンとの相違点について、malloc_malloc_dbg を例にして説明します。

_DEBUG が定義されている場合、CRT はすべての malloc 呼び出しを _malloc_dbg に置き換えます。したがって、malloc の代わりに _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 型への割り当て要求は標準の割り当てとして扱われます。

参照

その他の技術情報

CRT のデバッグ技術