Condividi tramite


_heapwalk

Attraversa heap e restituisce informazioni sulla voce seguente.

Nota importanteImportante

Questa API non può essere utilizzato nelle applicazioni eseguite nelle finestre runtime solo nelle build di debug.Per ulteriori informazioni, vedere Funzioni CRT non supportate con /ZW.

int _heapwalk( 
   _HEAPINFO *entryinfo 
);

Parametri

  • entryinfo
    Buffer per contenere informazioni heap.

Valore restituito

restituisce uno di_heapwalk delle costanti del manifesto dell'intero definite in Malloc.h.

  • _HEAPBADBEGIN
    Informazioni di intestazione iniziali non valida o non trovato.

  • _HEAPBADNODE
    Heap dannose o un nodo di ricerca.

  • _HEAPBADPTR
    il campo di_pentry della struttura di _HEAPINFO non contiene un puntatore valido in l o entryinfo è un puntatore null.

  • _HEAPEND
    Fine dell'heap eseguita correttamente.

  • _HEAPEMPTY
    Heap non inizializzata.

  • _HEAPOK
    Nessun errore finora, entryinfo viene aggiornato con le informazioni sulla voceheap.

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

Note

I problemi correlati heap- debug delle guide di funzione di _heapwalk programmi.La funzione viene tra heap, attraversa una voce per chiamare e restituisce un puntatore a una struttura di tipo _HEAPINFO che contiene informazioni sulla voceheap.Il tipo di _HEAPINFO, definito in Malloc.h, contiene i seguenti elementi.

  • int *_pentry
    Puntatore di ingresso dell'heap.

  • size_t _size
    Dimensione della voce dell'heap.

  • int _useflag
    Diminuisca che indica se la voce dell'heap viene utilizzata.

Una chiamata a _heapwalk che restituisce gli archivi di _HEAPOK la dimensione della voce nel campo di _size e impostare il campo di _useflag a _FREEENTRY o a _USEDENTRY (entrambe sono costanti definite in Malloc.h).Per ottenere queste informazioni sulla prima voce nell'heap, passare _heapwalk un puntatore a una struttura di _HEAPINFO di cui il membro di _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à nell'introduzione.

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