_heapwalk
Projde haldu a vrátí informace o další položce.
![]() |
---|
Toto rozhraní API nelze použít v aplikacích, které jsou spouštěny v modulu Windows Runtime kromě ladicích sestavení.Další informace naleznete v tématu CRT funkce nejsou podporovány s /ZW. |
int _heapwalk(
_HEAPINFO *entryinfo
);
Parametry
- entryinfo
Vyrovnávací paměť obsahující informace o haldě.
Vrácená hodnota
_heapwalk vrátí jedno z následující celých čísel konstant manifestu definovaných v Malloc.h.
_HEAPBADBEGIN
Počáteční informace hlavičky jsou neplatné nebo nebyly nalezeny._HEAPBADNODE
Poškozená halda nebo nalezený špatný uzel._HEAPBADPTR
Pole _pentry struktury _HEAPINFO neobsahuje platný ukazatel do haldy nebo entryinfo je nulový ukazatel._HEAPEND
Bylo úspěšně dosaženo konce haldy._HEAPEMPTY
Halda neinicializována._HEAPOK
Zatím žádné chyby; entryinfo se aktualizuje informacemi o další položce haldy.
Kromě toho, pokud dojde k chybě, _heapwalk nastaví errno na ENOSYS.
Poznámky
Funkce _heapwalk umožňuje ladění problémů v aplikacích souvisejících s haldou.Funkce projde haldu, přičemž přejde přes jednu položku na jedno zavolání, a vrátí ukazatel na strukturu typu _HEAPINFO, která obsahuje informace o další položce haldy.Typ _HEAPINFO, definovaný v souboru Malloc.h, obsahuje následující prvky.
int *_pentry
Ukazatel vstupu haldy.size_t _size
Velikost záznamu haldy.int _useflag
Příznak, který označuje, zda je položka haldy používaná.
Volání _heapwalk, které vrací _HEAPOK, ukládá velikost zadání v poli _size a nastavuje pole _useflag na _FREEENTRY nebo _USEDENTRY (obojí jsou konstanty definované v Malloc.h).Chcete-li získat tyto informace o první položce v haldě, předejte do _heapwalk ukazatel na strukturu _HEAPINFO, jejíž člen _pentry je NULL.Pokud operační systém nepodporuje _heapwalk(například Windows 98), vrátí funkce _HEAPEND a nastaví errno na ENOSYS.
Tato funkce ověřuje svůj parametr.Pokud entryinfo je ukazatel s hodnotou null, je vyvolána obslužná rutina neplatného parametru, jak je popsáno v Ověření parametru.Pokud smí provádění pokračovat, errno se nastaví na EINVAL a funkce vrátí _HEAPBADPTR.
Požadavky
Rutina |
Požadované záhlaví |
Volitelné záhlaví |
---|---|---|
_heapwalk |
<malloc.h> |
<errno.h> |
Další informace o kompatibilitě naleznete v tématu Kompatibilita.
Příklad
// 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;
}
}
Ekvivalent v rozhraní .NET Framework
Nelze použít. Pokud chcete volat standardní funkci jazyka C, použijte PInvoke. Další informace naleznete v tématu Příklady vyvolání platformy.