_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 つの状態間の割り当ての合計の差も stateDiff
に格納されます。
既定では、内部 C ランタイム ブロック (_CRT_BLOCK
) は、メモリ状態操作に含まれません。 _CrtSetDbgFlag
関数を使用すると、_crtDbgFlag
の_CRTDBG_CHECK_CRT_DF
ビットをオンにして、リーク検出やその他のメモリ状態操作にこれらのブロックを含めることができます。 解放されたメモリ ブロック (_FREE_BLOCK
) に関して、_CrtMemDifference
では TRUE
を返しません。
ヒープ状態関数と _CrtMemState
構造体について詳しくは、「ヒープ状態レポート関数」をご覧ください。 基本ヒープのデバッグ バージョンでのメモリ ブロックの割り当て、初期化、および管理方法については、「 CRT デバッグ ヒープの詳細を参照してください。
要件
ルーチンによって返される値 | 必須ヘッダー | オプション ヘッダー |
---|---|---|
_CrtMemDifference |
<crtdbg.h> |
<errno.h> |
互換性の詳細については、「 Compatibility」を参照してください。
ライブラリ: C ランタイム ライブラリのデバッグ バージョンのみ。