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


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

Этот раздел применим к:

Выпуск

Visual Basic

C#

F#

C++

Web Developer

Express

Тема не применяется Тема не применяется Тема не применяется

Только машинные коды

Тема не применяется

Pro, Premium и Ultimate

Тема не применяется Тема не применяется Тема не применяется

Только машинные коды

Тема не применяется

Библиотека 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