Condividi tramite


_heapwalk

Attraversa lo heap e restituisce informazioni sulla voce seguente.

Importante

Questa API non può essere utilizzata nelle applicazioni eseguite in Windows Runtime tranne che nelle build di Debug.Per ulteriori informazioni, vedere Funzioni CRT non supportate con /ZW.

int _heapwalk( 
   _HEAPINFO *entryinfo 
);

Parametri

  • entryinfo
    Buffer per contenere informazioni sullo heap.

Valore restituito

_heapwalk restituisce una delle seguenti costanti del manifesto dell'intero definite in Malloc.h.

  • _HEAPBADBEGIN
    Informazioni sull'intestazione iniziale non valide o non trovate.

  • _HEAPBADNODE
    Heap danneggiato o trovato cattivo nodo di ricerca .

  • _HEAPBADPTR
    Il campo _pentry della struttura _HEAPINFO non contiene un puntatore valido nell'heap o entryinfo è un puntatore null.

  • _HEAPEND
    Fine dell'heap raggiunta correttamente.

  • _HEAPEMPTY
    Heap non inizializzato.

  • _HEAPOK
    Nessun errore finora; entryinfo viene aggiornato con le informazioni sulla prossima voce dell'heap.

Inoltre, se si verifica un errore, _heapwalk imposta errno a ENOSYS.

Note

La funzione _heapwalk aiuta ad eseguire il debug dei problemi relativi all'heap nei programmi. La funzione attraversa lo heap, una voce per chiamata, e restituisce un puntatore a una struttura di tipo _HEAPINFO contenente informazioni sulla prossima voce dell'heap. Il tipo _HEAPINFO, definito in Malloc.h, contiene i seguenti elementi.

  • int *_pentry
    Puntatore alla voce dell'heap.

  • size_t _size
    Dimensione della voce dell'heap.

  • int _useflag
    Contrassegno che indica se la voce dell'heap è in uso.

Una chiamata a _heapwalk che restituisce _HEAPOK salva la dimensione della voce nel campo _size e imposta il campo _useflag a _FREEENTRY o _USEDENTRY (entrambe sono costanti definite in Malloc.h). Per ottenere queste informazioni sulla prima voce nell'heap, passare _heapwalk un puntatore a una struttura _HEAPINFO il cui membro _pentry è NULL. Se il sistema operativo non supporta _heapwalk(ad esempio Windows 98), la funzione restituisce _HEAPEND e imposta errno a ENOSYS.

Questa funzione convalida il parametro. Se entryinfo è un puntatore a null, viene richiamato il gestore di parametro non valido, come descritto in Convalida dei parametri. Se l'esecuzione può continuare, errno viene impostato su EINVAL e la funzione restituisce _HEAPBADPTR.

Requisiti

Routine

Intestazione obbligatoria

Intestazione facoltativa

_heapwalk

<malloc.h>

<errno.h>

Per ulteriori informazioni sulla compatibilità, vedere Compatibilità.

Esempio

// 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 .NET Framework

Non applicabile. Per chiamare la funzione standard C, utilizzare PInvoke. Per ulteriori informazioni, vedere Esempi di Invocazione della Piattaforma.

Vedere anche

Riferimenti

Allocazione di memoria

_heapadd

_heapchk

_heapmin

_heapset