_heapwalk
Percorre o heap e retorna informações sobre entrada seguir.
Importante |
---|
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.