_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. Дополнительные сведения см. в разделе Примеры вызовов неуправляемого кода.

См. также

Ссылки

Выделение памяти

_heapadd

_heapchk

_heapmin

_heapset