Share via


_CrtMemDifference

更新 : 2007 年 11 月

2 つのメモリ状態を比較し、差分を返します (デバッグ バージョンだけ)。

int _CrtMemDifference( 
   _CrtMemState *stateDiff,
   const _CrtMemState *oldState,
   const _CrtMemState *newState 
);

パラメータ

  • stateDiff
    2 つのメモリ状態の差分を格納する _CrtMemState 構造体へのポインタ (返されるパラメータ)。

  • oldState
    古い方のメモリ状態 (_CrtMemState 構造体) へのポインタ。

  • newState
    新しい方のメモリ状態 (_CrtMemState 構造体) へのポインタ。

戻り値

メモリ状態に重大な違いがある場合、_CrtMemDifference は TRUE を返します。それ以外の場合は FALSE を返します。

解説

_CrtMemDifference 関数は、oldState と newState を比較し、その差分を stateDiff に格納します。アプリケーションは、この差分を使用して、メモリ リークなどのメモリに関する問題を検出します。_DEBUG が未定義の場合、_CrtMemDifference の呼び出しはプリプロセスで削除されます。

newState と oldState は、それぞれ Crtdbg.h で定義されている _CrtMemState 構造体への有効なポインタにする必要があります。Crtdbg.h は、_CrtMemDifference を呼び出す前に _CrtMemCheckpoint で入力されます。stateDiff は、_CrtMemState 構造体の割り当て済みインスタンスへのポインタにする必要があります。stateDiff、newState、または oldState が NULL の場合は、「パラメータの検証」に説明されているように、無効なパラメータ ハンドラが呼び出されます。実行の継続が許可された場合、errno、_doserrno、_sys_errlist、および _sys_nerr が EINVAL に設定され、関数から FALSE が返されます。

_CrtMemDifference は、oldState のブロックの _CrtMemState フィールド値を newState のフィールド値と比較し、結果を stateDiff に格納します。割り当てられているブロック型の数や、割り当てられているブロックの型ごとの合計数が、2 つのメモリ状態で異なる場合、状態には重大な違いがあるといいます。これまで一度に割り当てられた最大数および割り当て総数についても、2 つの状態の差分が stateDiff に格納されます。

既定では、内部 C ランタイム ブロック (_CRT_BLOCK) は、メモリ状態検査の対象外です。このブロックをメモリ リークの検出などのメモリ状態操作の対象に含めるには、_CrtSetDbgFlag 関数を使用して _crtDbgFlag_CRTDBG_CHECK_CRT_DF ビットを ON にします。解放されたメモリ ブロック (_FREE_BLOCK) に対して、_CrtMemDifference は TRUE を返しません。

ヒープ状態関数と _CrtMemState 構造体の詳細については、「ヒープの状態をレポートする関数」を参照してください。デバッグ バージョンのベース ヒープに対するメモリ ブロックの割り当て、初期化、管理方法の詳細については、「メモリ管理とデバッグ ヒープ」を参照してください。

必要条件

ルーチン

必須ヘッダー

オプション ヘッダー

_CrtMemDifference

<crtdbg.h>

<errno.h>

互換性の詳細については、「C ランタイム ライブラリ」の「互換性」を参照してください。

ライブラリ:C ランタイム ライブラリ のデバッグ バージョンのみ。

使用例

crt_dbg1 サンプル : C ランタイムの基本的なデバッグ機能 を参照してください。

.NET Framework の相当するアイテム

適用できません。標準 C 関数を呼び出すには、PInvoke を使用します。詳細については、「プラットフォーム呼び出しの例」を参照してください。

参照

参照

デバッグ ルーチン

_crtDbgFlag