_heapwalk
Attraversa heap e restituisce informazioni sulla voce seguente.
![]() |
---|
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.