_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
前に入力された構造体crtdbg.h
_CrtMemCheckpoint
への_CrtMemState
有効なポインターである必要があります。 stateDiff
には、 _CrtMemState
構造体の以前に割り当てられたインスタンスへのポインターを指定する必要があります。 のoldState
newState
場合stateDiff
はNULL
、「パラメーターの検証」で説明されているように、無効なパラメーター ハンドラーが呼び出されます。 実行の続行が許可され、errno
, , _doserrno
, が_sys_errlist
設定EINVAL
され_sys_nerr
、関数が返されますFALSE
。
_CrtMemDifference
は、_CrtMemState
ブロックのフィールド値を内のフィールドoldState
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 ランタイム ライブラリのデバッグ バージョンのみ。
関連項目
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示