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 の呼び出しは前処理で削除されます。
newStateoldStateは、_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 ランタイム ライブラリのデバッグ バージョンのみ。