_heapwalk

Recorre la pila y devuelve información sobre la entrada siguiente.

Nota importanteImportante

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.

Vea también

Referencia

Asignación de memoria

_heapadd

_heapchk

_heapmin

_heapset