_heapwalk
Parcourt le tas et retourne des informations sur l'entrée.
Important
Cette API ne peut pas être utilisée dans les applications qui s'exécutent dans les fenêtres d'exécution sauf dans les versions debug.Pour plus d'informations, consultez Fonctions CRT non prises en charge avec /ZW.
int _heapwalk(
_HEAPINFO *entryinfo
);
Paramètres
- entryinfo
Mémoire tampon pour contenir les informations du tas.
Valeur de retour
retourne un d'_heapwalk les constantes suivantes de manifeste d'entier définies dans Malloc.h.
_HEAPBADBEGIN
Les informations d'en-tête initiales non valides ou introuvables._HEAPBADNODE
Tas endommagé ou incorrect nœud trouvé._HEAPBADPTR
le champ d'_pentry de la structure d' _HEAPINFO ne contient pas un pointeur valide dans le tas ou entryinfo est un pointeur null._HEAPEND
Fin de le tas atteint avec succès._HEAPEMPTY
Tas non initialisé._HEAPOK
Aucune erreur jusqu'à présent ; entryinfo est mis à jour avec les informations sur l'entrée du tas.
En outre, si une erreur se produit, _heapwalk définit errno à ENOSYS.
Notes
Les aides de fonction d' _heapwalk debug des problèmes liés au tas dans les programmes.La fonction traverse le tas, parcourir une entrée par appel, et retourne un pointeur vers une structure de type _HEAPINFO qui contient des informations sur l'entrée du tas.Le type d' _HEAPINFO, défini dans Malloc.h, contient les éléments suivants.
int *_pentry
Pointeur d'entrée du tas.size_t _size
Taille de l'entrée de tas.int _useflag
Réduisez qui indique si l'entrée du tas est en cours de utilisation.
Un appel à _heapwalk qui retourne des magasins d' _HEAPOK la taille de l'entrée dans le champ d' _size et définit le champ d' _useflag à _FREEENTRY ou à _USEDENTRY (les deux sont des constantes définies dans Malloc.h).Pour obtenir ces informations sur la première entrée dans le tas, exécutez _heapwalk un pointeur vers une structure d' _HEAPINFO dont le membre d' _pentry est NULL.Si le système d'exploitation ne prend pas _heapwalk(par exemple, Windows 98), la fonction retourne _HEAPEND et définit errno à ENOSYS.
Cette fonction valide paramètre.Si entryinfo est un pointeur null, le gestionnaire de paramètre non valide est appelé, comme décrit dans Validation des paramètres.Si est autorisé à l'exécution pour continuer, errno a la valeur EINVAL et la fonction retourne _HEAPBADPTR.
Configuration requise
Routine |
En-tête requis |
En-tête facultatif |
---|---|---|
_heapwalk |
<malloc.h> |
<errno.h> |
Pour plus d'informations de compatibilité, consultez l' Compatibilité dans l'introduction.
Exemple
// 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;
}
}
Équivalent .NET Framework
Non applicable. Pour appeler la fonction C standard, utilisez PInvoke. Pour plus d'informations, consultez l' Exemples d'appel de code non managé.