Udostępnij za pośrednictwem


_heapwalk

Przechodzi sterty i zwraca informacje o następnej pozycji.

Ważna uwagaWaż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.

Zobacz też

Informacje

Alokacja pamięci

_heapadd

_heapchk

_heapmin

_heapset