Compartilhar via


_heapwalk

Percorre o heap e retorna informações sobre a próxima entrada.

int _heapwalk( 
   _HEAPINFO *entryinfo 
);

Parâmetros

  • entryinfo
    Buffer para conter heap informações.

Valor de retorno

_heapwalk Retorna uma das seguintes constantes de manifesto de inteiro Malloc.h definidas.

  • _HEAPBADBEGIN
    Informações de cabeçalho inicial inválidas ou não foi encontradas.

  • _HEAPBADNODE
    Heap danificado ou nó inválido encontrado.

  • _HEAPBADPTR
    _pentry campo de _HEAPINFO estrutura não contém um ponteiro válido para o heap ou entryinfo é um ponteiro nulo.

  • _HEAPEND
    Atingido participante da heap com êxito.

  • _HEAPEMPTY
    heap não inicializado.

  • _HEAPOK
    Nenhum erro até o momento; entryinfo é atualizado com informações sobre a próxima heap entrada.

Além disso, se ocorrer um erro, _heapwalk Define errno para ENOSYS.

Comentários

The _heapwalk função ajuda a depurar problemas relacionados a pilha em programas. A função percorre o heap percorrer uma entrada por telefonar e retorna um ponteiro para uma estrutura do tipo _HEAPINFO que contém informações sobre a próxima heap entrada. The _HEAPINFO tipo, definido no Malloc.h, contém os seguintes elementos.

  • int *_pentry
    Ponteiro de entrada de heap.

  • size_t _size
    dimensionar da entrada de heap.

  • int _useflag
    sinalizar que indica se a entrada de heap está em uso.

Uma telefonar para _heapwalk que retorna _HEAPOK armazena o dimensionar da entrada no _size campo e conjuntos de _useflag campo a um _FREEENTRY ou _USEDENTRY (ambos são constantes definidas na Malloc.h). Para obter essas informações sobre a primeira entrada na pilha, passar _heapwalk um ponteiro para um _HEAPINFO estruturar cujos _pentry é membro NULL. If the operating system does not support _heapwalk(for example, Windows 98), the function returns _HEAPEND and sets errno to ENOSYS.

Esta função valida seu parâmetro.If entryinfo é um ponteiro nulo, o manipulador de parâmetro inválido é chamado, conforme descrito em Validação de parâmetro. Se a execução for permitida para continuar, errno é definido como EINVAL e a função retorna _HEAPBADPTR.

Requisitos

Rotina

Cabeçalho necessário

Cabeçalho opcional

_heapwalk

<malloc.h>

<errno.h>

Para obter mais informações de compatibilidade, consulte Compatibilidade na introdução.

Exemplo

// 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;
    }
}
  USED block at 00310650 of size 0100   USED block at 00310758 of size 0800   USED block at 00310F60 of size 0080   FREE block at 00310FF0 of size 0398   USED block at 00311390 of size 000D   USED block at 003113A8 of size 00B4   USED block at 00311468 of size 0034   USED block at 003114A8 of size 0039 ...   USED block at 00312228 of size 0010   USED block at 00312240 of size 1000   FREE block at 00313250 of size 1DB0 OK - end of heap

Equivalente do NET Framework

Não aplicável. Para telefonar a função C padrão, use PInvoke. Para obter mais informações, consulte Exemplos de invocação de plataforma.

Consulte também

Referência

Alocação de memória

_heapadd

_heapchk

_heapmin

_heapset