_heapwalk

Führt den Heap durch und gibt Informationen über den folgenden Eintrag zurück.

Wichtiger HinweisWichtig

Diese API kann nicht in den Anwendungen verwendet werden, die in der Windows Runtime außer in Debugbuilds ausführen.Weitere Informationen finden Sie unter CRT-Funktionen unterstützt nicht mit /ZW.

int _heapwalk( _HEAPINFO *entryinfo );

Parameter

  • entryinfo
    Der Puffer, dem von Heapinformationen zu enthalten.

Rückgabewert

_heapwalk gibt eine der folgenden Manifestkonstanten der ganzen Zahl in Malloc.h definiert.

  • _HEAPBADBEGIN
    Ursprüngliche Headerinformationen ungültig oder nicht gefunden.

  • _HEAPBADNODE
    Heap beschädigt oder schlechter Knoten gefunden.

  • _HEAPBADPTR
    _pentry Feld der _HEAPINFO-Struktur enthält einen gültigen Zeiger nicht in den Heap, oder entryinfo ist ein NULL-Zeiger.

  • _HEAPEND
    Ende des Heaps erfolgreich erreicht.

  • _HEAPEMPTY
    Heap nicht initialisiert.

  • _HEAPOK
    Keine Fehler bis jetzt; entryinfo wird mit Informationen zu den folgenden Heapeintrag aktualisiert.

Wenn ein Fehler auftritt, wird _heapwalkerrno zu ENOSYS fest.

Hinweise

Die _heapwalk-Funktionshilfen debuggen Heap-verknüpfte Probleme in Programmen.Die Funktionsgänge durch den Heap, einen Eintrag pro Aufruf und gibt ein Zeiger auf eine Struktur des Typs _HEAPINFO durchlaufend, der Informationen zum folgenden Heapeintrag enthält.Der _HEAPINFO-Typ definiert, in Malloc.h, enthält die folgenden Elemente.

  • int *_pentry
    HeapEintragszeiger.

  • size_t _size
    Größe des Heapeintrags.

  • int _useflag
    Kennzeichnen, das angibt, ob der Heapeintrag verwendet wird.

Ein Aufruf von _heapwalk, der _HEAPOK Speicher die Größe des Eintrags auf dem _size Feld zurückgibt und das _useflag Feld entweder zu _FREEENTRY oder zu _USEDENTRY festlegen (beide werden die Konstanten, die in Malloc.h definiert sind).Um diese Informationen über den ersten Eintrag im Heap, übergeben _heapwalk ein Zeiger auf eine Struktur _HEAPINFO erhalten, deren _pentry-Member NULL ist.Wenn das Betriebssystem nicht _heapwalk(beispielsweise, Windows 98) unterstützt, gibt die Funktion _HEAPEND zurück und legt errno zu ENOSYS fest.

Diese Funktion überprüft den Parameter.Wenn entryinfo ein NULL-Zeiger ist, wird der ungültige Parameterhandler aufgerufen, wie in Parametervalidierung beschrieben.Wenn die Ausführung zulässig ist, um fortzufahren, wird errno zu EINVAL festgelegt und die Funktion gibt _HEAPBADPTR zurück.

Anforderungen

Routine

Erforderlicher Header

Optionaler Header

_heapwalk

<malloc.h>

<errno.h>

Weitere Kompatibilitätsinformation finden Sie unter Kompatibilität in der Einführung.

Beispiel

// 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;
    }
}
  
  

.NET Framework-Entsprechung

Nicht zutreffend. Um die Standard-C-Funktion aufzurufen, verwenden Sie PInvoke. Weitere Informationen finden Sie unter Beispiele für Plattformaufrufe.

Siehe auch

Referenz

Speicherbelegung

_heapadd

_heapchk

_heapmin

_heapset