Compartilhar via


_heapwalk

Percorre o heap e retorna informações sobre entrada seguir.

Observação importanteImportante

Este API não pode ser usado em aplicativos executados em Tempo de Execução do Windows a não ser que a depuração para compilar.Para obter mais informações, consulte Funções de CRT não suportadas com /ZW.

int _heapwalk( _HEAPINFO *entryinfo );

Parâmetros

  • entryinfo
    Buffer para conter informações de heap.

Valor de retorno

retorna um de_heapwalk das constantes de manifesto inteiro definidas em Malloc.h.

  • _HEAPBADBEGIN
    Informações de cabeçalho inicial inválido ou não encontrada.

  • _HEAPBADNODE
    Heap danificado ou nó incorreto encontrado.

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

  • _HEAPEND
    O final da heap alcançado com êxito.

  • _HEAPEMPTY
    Heap não inicializado.

  • _HEAPOK
    Nenhum erro até agora; entryinfo é atualizado com informações sobre a seguinte entrada de heap.

Além disso, se ocorrer um erro, _heapwalk define errno a ENOSYS.

Comentários

Problemas relacionados heap- de depuração de ajuda a função de _heapwalk em programas.A função percorre o heap, através uma entrada pela chamada retorna, e um ponteiro a estrutura do tipo _HEAPINFO que contém informações sobre a seguinte entrada de heap.O tipo de _HEAPINFO , definidos em Malloc.h, contém os seguintes elementos.

  • int *_pentry
    Ponteiro de entrada da heap.

  • size_t _size
    Tamanho de entrada da heap.

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

Uma chamada para _heapwalk que retorna armazenamentos de _HEAPOK o tamanho de entrada no campo de _size e define o campo de _useflag a _FREEENTRY ou a _USEDENTRY (ambos são constantes definidas em Malloc.h).Para obter esta informação sobre a primeira entrada no heap, passe _heapwalk um ponteiro a estrutura de _HEAPINFO cujo membro de _pentry é NULL.Se o sistema operacional não oferece suporte _heapwalk(por exemplo, Windows 98), a função retorna _HEAPEND e defina errno a ENOSYS.

Essa função valida o parâmetro.Se entryinfo é um ponteiro zero, o manipulador inválido do parâmetro é invocado, como descrito em Validação de parâmetro.Se a execução é permitida 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 mais informações, consulte Compatibilidade de 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;
    }
}
  
  

Equivalência do .NET Framework

Não aplicável. Para chamar a função padrão de C, 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