Compartir a través de


_heapwalk

Recorre el montón y devuelve información sobre la entrada siguiente.

Importante

Esta API no se puede usar en aplicaciones que se ejecutan en Windows en tiempo de ejecución, salvo en compilaciones Debug.Para obtener más información, vea Funciones de CRT no admitidas con /ZW.

int _heapwalk( 
   _HEAPINFO *entryinfo 
);

Parámetros

  • entryinfo
    Búfer que contendrá la información del montón.

Valor devuelto

_heapwalk devuelve una de las siguientes constantes de manifiesto enteras, definidas en Malloc.h.

  • _HEAPBADBEGIN
    La información de encabezado inicial no es válida o no se encuentra.

  • _HEAPBADNODE
    Se ha encontrado un montón dañado o un nodo incorrecto.

  • _HEAPBADPTR
    El campo _pentry de la estructura de _HEAPINFO no contiene un puntero válido para el montón o entryinfo es un puntero nulo.

  • _HEAPEND
    Se ha llegado al final del montón correctamente.

  • _HEAPEMPTY
    El montón no está inicializado.

  • _HEAPOK
    Ningún error hasta el momento. entryinfo se actualiza con la información sobre la siguiente entrada del montón.

Además, si se produce un error, _heapwalk establece errno en ENOSYS.

Comentarios

La función _heapwalk ayuda a depurar problemas relacionados con el montón de los programas. La función recorre el montón, atravesando una entrada por llamada, y devuelve un puntero a una estructura del tipo _HEAPINFO que contiene información sobre la siguiente entrada del montón. El tipo _HEAPINFO, definido en Malloc.h, contiene los elementos siguientes.

  • int *_pentry
    Puntero de entrada en el montón.

  • size_t _size
    Tamaño de la entrada del montón.

  • int _useflag
    Marca que indica si la entrada del montón está en uso.

Una llamada a _heapwalk que devuelve _HEAPOK almacena el tamaño de la entrada en el campo _size y establece el campo _useflag en _FREEENTRY o _USEDENTRY (ambas constantes se definen en Malloc.h). Para obtener esta información sobre la primera entrada del montón, pase un puntero de _heapwalk a una estructura de _HEAPINFO cuyo miembro _pentry sea NULL. Si el sistema operativo no admite _heapwalk(por ejemplo Windows 98), la función devuelve _HEAPEND y establece errno en ENOSYS.

Esta función valida su parámetro. Si entryinfo es un puntero nulo, se invoca el controlador de parámetros no válidos, 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 sobre compatibilidad, vea Compatibilidad.

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, use PInvoke. Para obtener más información, vea Ejemplos de invocación de plataforma.

Vea también

Referencia

Asignación de memoria

_heapadd

_heapchk

_heapmin

_heapset