_CrtMemDifference
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 には、_CrtMemDifference を呼び出す前に _CrtMemCheckpoint によってデータが格納された、Crtdbg.h で定義されている _CrtMemState 構造体への有効なポインターを指定する必要があります。 stateDiff には、_CrtMemState 構造体の以前に割り当てられたインスタンスへのポインターを指定する必要があります。 stateDiff、newState、または oldState が NULL の場合は、「パラメーターの検証」に説明されているように、無効なパラメーター ハンドラーが呼び出されます。 実行の継続が許可された場合、errno、_doserrno、_sys_errlist、および _sys_nerr は EINVAL に設定され、FALSE が返されます。
_CrtMemDifference は、oldState のブロックの _CrtMemState フィールド値と newState のブロックのそのフィールド値を比較し、結果を stateDiff に格納します。 割り当てられているブロックの型の数または各型に割り当てられているブロックの合計数が 2 つのメモリ状態で異なる場合、この 2 つの状態は、大きく異なると言えます。 2 つの状態間の、一度に割り当てられた量の最大値の差、および 2 つの状態間の割り当ての合計の差も stateDiff に格納されます。
既定では、内部 C ランタイム ブロック (_CRT_BLOCK) は、メモリ状態操作に含まれません。 _CrtSetDbgFlag 関数を使用して _crtDbgFlag の _CRTDBG_CHECK_CRT_DF ビットをオンにすることで、このブロックをリーク検出などのメモリ状態操作に含めることができます。 解放されたメモリ ブロック (_FREE_BLOCK) に関して、_CrtMemDifference は TRUE を返しません。
ヒープ状態関数と _CrtMemState 構造体の詳細については、「Heap State Reporting Functions (ヒープの状態をレポートする関数)」を参照してください。 デバッグ バージョンのベース ヒープに対するメモリ ブロックの割り当て、初期化、管理方法の詳細については、「CRT デバッグ ヒープ」を参照してください。
必要条件
ルーチン |
必須ヘッダー |
オプション ヘッダー |
---|---|---|
_CrtMemDifference |
<crtdbg.h> |
<errno.h> |
互換性の詳細については、「C ランタイム ライブラリ」の「互換性」を参照してください。
ライブラリ:CRT ライブラリの機能 のデバッグ バージョンのみ。
使用例
「crt_dbg1」を参照してください。
同等の .NET Framework 関数
使用できません。標準 C 関数を呼び出すには、PInvoke を使用します。詳細については、「プラットフォーム呼び出しの例」を参照してください。