_heapwalk
Projde haldy a vrátí informace o další položky.
Důležité |
---|
Toto rozhraní API nelze použít v aplikacích, které jsou spuštěny v běhu systému Windows s výjimkou v sestavení ladění.Další informace naleznete v tématu CRT funkce nejsou podporovány s /ZW. |
int _heapwalk(
_HEAPINFO *entryinfo
);
Parametry
- entryinfo
Chcete-li vyrovnávací paměť obsahuje informace o haldy.
Vrácená hodnota
_heapwalkVrátí jednu z následujících celočíselných manifestu konstanty definované v Malloc.h.
_HEAPBADBEGIN
Počáteční záhlaví nebyl nalezen nebo je neplatný._HEAPBADNODE
Halda poškozená nebo chybné uzel nalezen._HEAPBADPTR
_pentrypole _HEAPINFO struktura neobsahuje platný ukazatel do haldy nebo entryinfo je ukazatel s hodnotou null._HEAPEND
Haldy dosažen úspěšně._HEAPEMPTY
Halda nebyla inicializována._HEAPOK
Žádné chyby tak daleko; entryinfoje aktualizována informacemi zahrnujícími další položky haldy.
Kromě toho, pokud dojde k chybě _heapwalk nastaví errno na ENOSYS.
Poznámky
_heapwalk Funkce pomáhá ladění haldy související problémy v aplikacích.Funkce prochází přes haldy, křížení jednu položku za volání a vrací ukazatel na strukturu typu _HEAPINFO , který obsahuje informace o další položky haldy._HEAPINFO Typu, které jsou definovány v Malloc.h, obsahuje následující prvky.
int *_pentry
Ukazatel položka haldy.size_t _size
Velikost vstupu haldy.int _useflag
Příznak označující, zda položka haldy je používán.
Volání _heapwalk , který vrací _HEAPOK ukládá velikost položky v _size pole a sady _useflag pole buď _FREEENTRY nebo _USEDENTRY (obě jsou konstanty definované v Malloc.h).Chcete-li získat tyto informace o první položce v haldě, předejte _heapwalk ukazatel _HEAPINFO struktury, jejichž _pentry člen je NULL.Je-li operační systém nepodporuje _heapwalk (například Windows 98), vrátí funkce _HEAPEND a errno na ENOSYS.
Tato funkce ověřuje jeho parametr.Pokud entryinfo je ukazatel s hodnotou null, je vyvolána obslužná rutina neplatný parametr, jak je popsáno v Ověření parametrů.Je-li pokračovat, je povoleno zpracování errno je nastavena na EINVAL a vrátí funkce _HEAPBADPTR.
Požadavky
Byla zahájena rutina |
Požadované záhlaví |
Volitelné záhlaví |
---|---|---|
_heapwalk |
<malloc.h> |
<errno.h> |
Další informace o kompatibilitě v tématu Compatibility v úvodu.
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 Volání funkce standardním C pomocí PInvoke. Další informace naleznete v tématu Platformu vyvolání příklady.