_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.