_heapwalk
Führt den Heap durch und gibt Informationen über den folgenden Eintrag zurück.
Wichtig |
---|
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.