_heapwalk
Przechodzi sterty i zwraca informacje o następnej pozycji.
Ważne |
---|
Ten interfejs API nie można używać w aplikacjach, które wykonać w czasie wykonywania systemu Windows z wyjątkiem w kompilacje debugowania.Aby uzyskać więcej informacji, zobacz CRT funkcje nie obsługiwane przez /ZW. |
int _heapwalk(
_HEAPINFO *entryinfo
);
Parametry
- entryinfo
Bufor musi zawierać informacje stosu.
Wartość zwracana
_heapwalkZwraca jedną z następujących stałych manifestu liczba całkowita, zdefiniowaną w Malloc.h.
_HEAPBADBEGIN
Informacje nagłówka początkowy jest nieprawidłowy lub nie został odnaleziony._HEAPBADNODE
Sterty, uszkodzone lub zły węzła._HEAPBADPTR
_pentrypole _HEAPINFO struktura nie zawiera prawidłowego wskaźnika do sterty lub entryinfo jest pusty wskaźnik._HEAPEND
Pomyślnie osiągnięty koniec sterty._HEAPEMPTY
Sterta nie zainicjowany._HEAPOK
Brak błędów do tej pory; entryinfojest aktualizowana z informacjami o następnej pozycji sterty.
Ponadto, jeśli wystąpi błąd _heapwalk ustawia errno do ENOSYS.
Uwagi
_heapwalk Funkcja pomaga debugowania problemów związanych z sterty, w programach.Funkcja poprowadzi przez stertę, przechodzenie przez jeden zapis na wywołanie i zwraca wskaźnik do struktury typu _HEAPINFO zawiera informacje o następnej pozycji sterty._HEAPINFO Typu, określonego w Malloc.h, zawiera następujące elementy.
int *_pentry
Wskaźnik wejścia sterty.size_t _size
Rozmiar zapisu sterty.int _useflag
Flaga wskazująca, czy wpis sterty jest w użyciu.
Wywołanie _heapwalk , które przekazuje _HEAPOK przechowuje rozmiar wpisu w _size pola i zestawy _useflag pola albo _FREEENTRY lub _USEDENTRY (oba wyrazy są stałe zdefiniowane w Malloc.h).Aby uzyskać te informacje dotyczące pierwszej pozycji w stosie, przekazać _heapwalk wskaźnik do _HEAPINFO struktury, których _pentry element członkowski jest NULL.Jeśli system operacyjny nie obsługuje _heapwalk (na przykład, Windows 98), funkcja zwraca _HEAPEND i ustawia errno do ENOSYS.
Ta funkcja sprawdza poprawność jej parametr.Jeśli entryinfo jest pusty wskaźnik, program obsługi nieprawidłowy parametr jest wywoływana, zgodnie z opisem w Sprawdzanie poprawności parametru.Jeśli wykonanie może kontynuować, errno jest ustawiona na EINVAL i funkcja zwraca _HEAPBADPTR.
Wymagania
Rozpoczęto wykonywanie procedury |
Wymaganego nagłówka |
Opcjonalny nagłówka |
---|---|---|
_heapwalk |
<malloc.h> |
<errno.h> |
Informacji dotyczących zgodności, zobacz zgodności we wprowadzeniu.
Przykład
// 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;
}
}
Odpowiednik w programie .NET Framework
Nie dotyczy. Aby wywoływać funkcji C standardowej, należy użyć PInvoke. Aby uzyskać więcej informacji, zobacz Przykłady wywołać platformy.