Partager via


_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é.

Voir aussi

Référence

Allocation de mémoire

_heapadd

_heapchk

_heapmin

_heapset