_heapwalk
Recorre la pila y devuelve información sobre la entrada siguiente.
Importante |
---|
Esta API no se puede utilizar en las aplicaciones que se ejecutan en tiempo de ejecución de Windows a menos que en depuración compile.Para obtener más información, vea Funciones CRT no compatibles con /ZW. |
int _heapwalk(
_HEAPINFO *entryinfo
);
Parámetros
- entryinfo
Búfer para contener la información de la pila.
Valor devuelto
_heapwalk devuelve una de las constantes de manifiesto integer siguiente definidas en Malloc.h.
_HEAPBADBEGIN
Información de encabezado inicial válida o no encontrada._HEAPBADNODE
Pila dañado o nodo incorrecta encontrado._HEAPBADPTR
el campo de _pentry de la estructura de _HEAPINFO no contiene un puntero válido en la pila o entryinfo es un puntero NULL._HEAPEND
Final de la pila acceso correctamente._HEAPEMPTY
Pila no inicializada._HEAPOK
Ningún error hasta ahora; entryinfo se actualiza con la información sobre la entrada siguiente de la pila.
Además, si se produce un error, _heapwalk establece errno a ENOSYS.
Comentarios
Los problemas pila- relacionados de depuración de la función de _heapwalk en software.La función recorre la pila, atravesar una entrada por llamada, y devuelve un puntero a una estructura de _HEAPINFO tipo que contiene información sobre la siguiente entrada de la pila.El tipo de _HEAPINFO, definido en Malloc.h, contiene los elementos siguientes.
int *_pentry
Puntero de entrada de la pila.size_t _size
Tamaño de la entrada de la pila.int _useflag
Marcador que indica si la entrada de la pila está en uso.
Una llamada a _heapwalk que devuelve _HEAPOK almacena el tamaño de la entrada del campo de _size y establezca el campo de _useflag a _FREEENTRY o a _USEDENTRY (dos son constantes definidas en Malloc.h).Para obtener información sobre la primera entrada de la pila, paso _heapwalk un puntero a una estructura de _HEAPINFO cuyo miembro de _pentry es NULL.Si el sistema operativo no admite _heapwalk(por ejemplo, Windows 98), la función devuelve _HEAPEND y establece errno a ENOSYS.
Esta función valida su parámetro.Si entryinfo es un puntero NULL, se invoca el controlador no válido de parámetro, tal y como se describe en Validación de parámetros.Si la ejecución puede continuar, errno se establece en EINVAL y la función devuelve _HEAPBADPTR.
Requisitos
Rutina |
Encabezado necesario |
Encabezado opcional |
---|---|---|
_heapwalk |
<malloc.h> |
<errno.h> |
Para obtener más información de compatibilidad, vea Compatibilidad en la Introducción.
Ejemplo
// 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;
}
}
Equivalente en .NET Framework
No es aplicable Para llamar a la función estándar de C, utilice PInvoke. Para obtener más información, vea La invocación de plataforma ejemplos.