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


Версии отладки функций выделения кучи

Библиотека среды выполнения C (CRT) содержит специальные версии отладочных функций выделения кучи. Эти функции имеют те же имена, что и версии выпуска, _dbg добавленные к ним. В этой статье описываются различия между версией выпуска функции CRT и _dbg версией, используя malloc и _malloc_dbg в качестве примеров.

Поведение в отладочных сборках

При _DEBUG определении CRT сопоставляет все malloc вызовы _malloc_dbg. Таким образом, вам не нужно перезаписывать код, используя _malloc_dbg вместо malloc получения преимуществ при отладке.

Конечно, при желании можно и явно вызывать _malloc_dbg. Явный вызов _malloc_dbg имеет свои преимущества:

  • Отслеживание выделений типа _CLIENT_BLOCK.

  • Запись имени исходного файла и номера строки, где был сделан запрос на выделение памяти.

Если вы не хотите преобразовывать malloc вызовы _malloc_dbg, вы можете получить сведения о исходном файле, определив _CRTDBG_MAP_ALLOC, что приводит к тому, что препроцессор напрямую сопоставляет все вызовы malloc вместо _malloc_dbg того, чтобы полагаться на оболочку вокруг malloc.

Чтобы отследить отдельные типы выделений памяти в клиентских блоках, нужно непосредственно вызвать функцию _malloc_dbg и задать параметру blockType значение _CLIENT_BLOCK.

Поведение в сборках, отличных от отладки

Если _DEBUG не определено, вызовы malloc не нарушаются, вызовы _malloc_dbg разрешаются mallocв, определение _CRTDBG_MAP_ALLOC игнорируется, а исходные сведения о файле, относящиеся к запросу на выделение, не предоставляются. Так как malloc у него нет параметра типа блока, запросы на _CLIENT_BLOCK типы рассматриваются как стандартные выделения.

См. также

Методы отладки CRT