_heapwalk
Выполняет кучи и возвращает сведения о следующей записи.
Важно |
---|
Этот API нельзя использовать в приложениях, выполняемых в среды выполнения Windows, кроме в отладочных построений.Дополнительные сведения см. в разделе Функции CRT не поддерживаются при /ZW. |
int _heapwalk(
_HEAPINFO *entryinfo
);
Параметры
- entryinfo
Буфер, который будет содержать данные кучи.
Возвращаемое значение
_heapwalk возвращает одну из следующих констант манифеста целые числа, определенных в Malloc.h.
_HEAPBADBEGIN
Не найдено начальные сведения заголовка недопустимые или._HEAPBADNODE
Поврежденная куча или неверный обнаружен узел._HEAPBADPTR
поле _pentry структуры _HEAPINFO не содержит допустимый указатель на кучу или указатель entryinfo._HEAPEND
Элемент кучи, достигается успешно._HEAPEMPTY
Не инициализированная куча._HEAPOK
Без ошибок до сих пор; entryinfo обновляется информацией о следующей записи кучи.
Кроме того, если возникает ошибка, то _heapwalk задает для errno значение ENOSYS.
Заметки
Справки функции _heapwalk содержит куча- связанные проблемы в программах.Функция проходит через кучу, обход одну запись для каждого вызова, и возвращает указатель на структуру типа _HEAPINFO, содержащий сведения о следующей записи кучи.Тип _HEAPINFO, определенный в Malloc.h, содержит следующие элементы.
int *_pentry
Указатель записи кучи.size_t _size
Размер записи кучи.int _useflag
Флажок, который указывает, является ли набор записей кучи в использовании.
Вызов метода _heapwalk, который возвращает _HEAPOK хранит размер записи в поле _size и задает поле _useflag значение _FREEENTRY или _USEDENTRY (оба константы, определенные в Malloc.h).Доступ к этой информации о первой записи в куче, передать _heapwalk указатель на структуру _HEAPINFO, член _pentry класса NULL.Если операционная система не поддерживает _heapwalk(например, Windows 98), функция _HEAPEND возвращает и задает для errno значение ENOSYS.
Эта функция проверяет свой параметр.Если указатель entryinfo, обработчик вызывается недопустимого параметра, как описано в разделе Проверка параметров.Если среда выполнения может продолжить, свойство errno имеет значение EINVAL и функция возвращает значение _HEAPBADPTR.
Требования
Функция |
Требуемый заголовок |
Необязательный заголовок |
---|---|---|
_heapwalk |
<malloc.h> |
<errno.h> |
Дополнительные сведения о совместимости см. в разделе Совместимость во введении.
Пример
// crt_heapwalk.c
// This program "walks" the heap, starting
// at the beginning (_pentry = NULL). It prints out each
// heap entry's use, location, and size. It also prints
// out information about the overall state of the heap as
// soon as _heapwalk returns a value other than _HEAPOK
// or if the loop has iterated 100 times.
#include <stdio.h>
#include <malloc.h>
void heapdump(void);
int main(void)
{
char *buffer;
heapdump();
if((buffer = (char *)malloc(59)) != NULL)
{
heapdump();
free(buffer);
}
heapdump();
}
void heapdump(void)
{
_HEAPINFO hinfo;
int heapstatus;
int numLoops;
hinfo._pentry = NULL;
numLoops = 0;
while((heapstatus = _heapwalk(&hinfo)) == _HEAPOK &&
numLoops < 100)
{
printf("%6s block at %Fp of size %4.4X\n",
(hinfo._useflag == _USEDENTRY ? "USED" : "FREE"),
hinfo._pentry, hinfo._size);
numLoops++;
}
switch(heapstatus)
{
case _HEAPEMPTY:
printf("OK - empty heap\n");
break;
case _HEAPEND:
printf("OK - end of heap\n");
break;
case _HEAPBADPTR:
printf("ERROR - bad pointer to heap\n");
break;
case _HEAPBADBEGIN:
printf("ERROR - bad start of heap\n");
break;
case _HEAPBADNODE:
printf("ERROR - bad node in heap\n");
break;
}
}
Эквивалент в .NET Framework
Неприменимо. Для вызова стандартной функции C используйте PInvoke. Дополнительные сведения см. в разделе Примеры вызовов неуправляемого кода.