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


_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, and _sys_nerr устанавливается в EINVAL и функция возвращает значение false.

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

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

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

Требования

Подпрограмма

Обязательный заголовок

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

_CrtMemDifference

<crtdbg.h>

<errno.h>

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

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

Пример

См. раздел crt_dbg1.

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

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

См. также

Ссылки

Процедуры отладки

_crtDbgFlag