Sdílet prostřednictvím


_heapwalk

Projde haldy a vrátí informace o další položky.

Důležitá poznámkaDů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.

Viz také

Referenční dokumentace

Přidělení paměti

_heapadd

_heapchk

_heapmin

_heapset