Программирование на C и C++

Онлайн справочник программиста на C и C++

heapwalk, farheapwalk, _rtl_heapwalk

int heapwalk(struct heapinfo *hinfo)

int farheapwalk(struct farheapinfo *hinfo)

int _rtl_heapwalk(_HEAPINFO *hinfo)

Прототип: 
Описание: 

Прототип функции _rtl_heapwalk() содержится в файле malloc.h. Эти функции не определены стандартом ANSI С и являются специфическими для Borland С++.

Функции heapwalk() и farheapwalk() заполняет структуру, на которую указывает параметр hinfo. Каждый вызов функции heapwalk() или farheapwalk() вызывает переход к следующему узлу в куче и возвращает информацию об этом узле. Когда в куче не осталось больше узлов, возвращается величина _HEAPEND. Если куча отсутствует, то возвращается значение _HEAPEMPTY. Всякий раз, когда анализируется действительный блок, возвращается значение _НЕАРОК.

Функция heapwalk() работает с ближней кучей, а функция farheapwalk() — с дальней.

Структуры heapinfo и farheapinfo содержат три поля: указатель на блок, размер блока и флаг, который устанавливается в случае использования блока. Эти структуры показаны ниже:

 

При первом вызове любой из функций необходимо установить поле ptr равным значению NULL, прежде чем вызывать функции heapwalk() или farheapwalk().

В силу того способа, которым Borland С++ организует систему динамического выделения па­мяти, размер выделенного блока памяти несколько больше запрошенного количества памяти.

При использовании этих функций предполагается, что куча не повреждена. Надо всегда вызы­вать функции heapcheck() или farheapcheck(), прежде чем вызывать функции обхода кучи.

Функция _rtl_heapwalK() аналогична функции heapwalk(), за исключением того, что она ис­пользует следующую структуру:

 

В дополнение к значениям, возвращаемым функцией heapwalk(), функция _rtl_heapwalk() мо­жет возвращать значение _HEAPBADNODE (ошибка найдена в куче) или _НЕАРВАDРТR (_pentry недействителен).

Пример: