_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.