Поделиться через


_CrtMemDifference

Сравнивает два состояния памяти и возвращает их отличия (только для отладочной версии).

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

Параметры

  • stateDiff
    Указатель на структуру _CrtMemState, которая используется для хранения различий между двумя состояниями памяти (возвращается).

  • oldState
    Указатель на предыдущее состояние памяти (структура _CrtMemState).

  • newState
    Указатель на последующее состояние памяти (структура _CrtMemState).

Возвращаемое значение

Если состояния памяти значительно отличаются, то _CrtMemDifference возвращает значение true.В противном случае функция возвращает значение false.

Заметки

Функция _CrtMemDifference сравнивает oldState и newState и сохраняет их различия в stateDiff, который затем может использоваться приложением для обнаружения утечек памяти и других проблем в памяти.Если _DEBUG не определен, то вызовы _CrtMemDifference удаляются во время предварительной обработки.

newState и oldState должны быть корректными указателями на структуру _CrtMemState (определена в Crtdbg.h), заполненную с помощью _CrtMemCheckpoint до вызова _CrtMemDifference.Параметр stateDiff должен быть указателем на ранее выделенный экземпляр структуры _CrtMemState.Если stateDiff, newState или oldState содержат значение NULL, то вызывается обработчик недопустимого параметра, как описано в Проверка параметров.Если выполнение может быть продолжено, то errno, _doserrno, _sys_errlist и _sys_nerr устанавливается в EINVAL и функция возвращает значение false.

_CrtMemDifference сравнивает значения блоков полей _CrtMemState в oldState с соответствующими в newState и сохраняет результат в stateDiff.Если количество выделенных типов блоков или общее количество выделенных блоков для каждого типа отличается для двух состояний памяти, то состояния считаются значительно отличающимися.Разница между самым большим количеством, одновременно выделенным для двух состояний, и разница между общим выделенным количеством для двух состояний также сохраняются в stateDiff.

По умолчанию внутренние блоки С времени выполнения (_CRT_BLOCK) не включаются в операции состояний памяти.Функцию _CrtSetDbgFlag можно использовать для включения бита _CRTDBG_CHECK_CRT_DF флага _crtDbgFlag, чтобы включить эти блоки в обнаружение утечек памяти и другие операции состояния.Освобожденные блоки памяти (_FREE_BLOCK) не приводят к возвращению _CrtMemDifference значения true.

Дополнительные сведения о функциях состояния кучи и структуре _CrtMemState см. в разделе Функции создания отчетов о состоянии кучи.Сведения о том, как происходит выделение, инициализация и управление блоками памяти в отладочной версии базовой кучи см. в разделе Управление памятью и куча отладки.

Требования

Функция

Требуемый заголовок

Необязательные заголовки

_CrtMemDifference

<crtdbg.h>

<errno.h>

Дополнительные сведения о совместимости см. в разделе Совместимость во введении.

Версии Библиотеки: Отладочные версии только для Функции библиотеки CRT.

Пример

Дополнительные сведения см. в разделе crt_dbg1.

Эквивалент в .NET Framework

Неприменимо. Для вызова стандартной функции C используйте PInvoke. Дополнительные сведения см. в разделе Примеры вызовов неуправляемого кода.

См. также

Ссылки

Подпрограммы отладка

_crtDbgFlag