_CrtMemDifference

2 つのメモリ状態を比較し、その違いを返します (デバッグ バージョンのみ)。

構文

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

パラメーター

stateDiff
(返された) 2 つのメモリ状態の違いを格納する _CrtMemState 構造体へのポインター。

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

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

戻り値

メモリの状態の差が大きい場合は、 _CrtMemDifference を返します TRUE。 それ以外の場合、関数は FALSE を返します。

解説

_CrtMemDifference 関数では、oldStatenewState を比較し、その違いを stateDiff に格納します。アプリではこの情報を使用して、メモリ リークなどのメモリの問題を検出できます。 _DEBUG が定義されていない場合、_CrtMemDifference の呼び出しは前処理で削除されます。

newStateoldState呼び出す_CrtMemDifference前に入力された構造体crtdbg.h_CrtMemCheckpointへの_CrtMemState有効なポインターである必要があります。 stateDiff には、 _CrtMemState 構造体の以前に割り当てられたインスタンスへのポインターを指定する必要があります。 のoldStatenewState場合stateDiffNULL、「パラメーターの検証」で説明されているように、無効なパラメーター ハンドラーが呼び出されます。 実行の続行が許可され、errno, , _doserrno, が_sys_errlist設定EINVALされ_sys_nerr、関数が返されますFALSE

_CrtMemDifferenceは、_CrtMemStateブロックのフィールド値を内のフィールドoldStatenewState値と比較し、結果stateDiffを格納します。 各タイプに割り当てられたブロック・タイプの数または割り振り済みブロックの総数が 2 つのメモリー状態の間で異なる場合、状態の違いは有意と見なされます。 2 つの状態間の、一度に割り当てられた量の最大値の差、および 2 つの状態間の割り当ての合計の差も stateDiffに格納されます。

既定では、内部 C ランタイム ブロック (_CRT_BLOCK) は、メモリ状態操作に含まれません。 この_CrtSetDbgFlag関数を使用して、リーク検出やその他の_crtDbgFlagメモリ状態操作にこれらのブロックを含めるビットをオンにすることができます_CRTDBG_CHECK_CRT_DF。 解放されたメモリ ブロック (_FREE_BLOCK) に関して、_CrtMemDifference では TRUE を返しません。

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

必要条件

ルーチンによって返される値 必須ヘッダー オプション ヘッダー
_CrtMemDifference <crtdbg.h> <errno.h>

互換性の詳細については、「 Compatibility」を参照してください。

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

関連項目

デバッグ ルーチン
_crtDbgFlag