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 недействителен).