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

Обновлен: Ноябрь 2007

Этот раздел применим для следующих версий.

Выпуск

Visual Basic

C#

C++

Web Developer

Экспресс-выпуск

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

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

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

Standard

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

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

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

Pro и Team

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

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

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

Условные обозначения:

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

Применимо

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

Неприменимо

Тема применяется, но команда по умолчанию сокрыта

Команда или команды по умолчанию скрыты.

Библиотека 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 обрабатываются как стандартные выделения.

Добавления сообщества

Показ: