_heapwalk

Yığının çapraz geçişini yapıp sonraki girişle ilgili bilgileri döndürür.

Önemli

Bu API, hata ayıklama derlemeleri dışında Windows Çalışma Zamanı yürütülen uygulamalarda kullanılamaz. Daha fazla bilgi için bkz. Evrensel Windows Platformu uygulamalarında desteklenmeyen CRT işlevleri.

Sözdizimi

int _heapwalk( _HEAPINFO *entryinfo );

Parametreler

entryinfo
Yığın bilgilerini içerecek arabellek.

Dönüş değeri

_heapwalk Malloc.h dosyasında tanımlanan aşağıdaki tamsayı bildirim sabitlerinden birini döndürür.

Dönüş değeri Anlamı
_HEAPBADBEGIN İlk üst bilgi bilgileri geçersiz veya bulunamadı.
_HEAPBADNODE Yığın hasar görmüş veya bozuk düğüm bulundu.
_HEAPBADPTR Yapının _pentry alanı _HEAPINFO yığında geçerli bir işaretçi içermiyor veya entryinfo null bir işaretçi.
_HEAPEND Yığının sonuna başarıyla ulaşıldı.
_HEAPEMPTY Yığın başlatılmadı.
_HEAPOK Şu ana kadar hata yok; entryinfo sonraki yığın girişiyle ilgili bilgilerle güncelleştirilir.

Buna ek olarak, bir hata oluşursa olarak _heapwalk ayarlar errno ENOSYS.

Açıklamalar

işlevi, _heapwalk programlarda yığınla ilgili sorunların hatalarını ayıklamaya yardımcı olur. İşlev, çağrı başına bir giriş geçirerek yığında yol gösterir ve sonraki yığın girdisi hakkında bilgi içeren bir tür _HEAPINFO yapısına yönelik bir işaretçi döndürür. _HEAPINFO Malloc.h içinde tanımlanan türü aşağıdaki öğeleri içerir.

Alan Anlamı
int *_pentry Yığın giriş işaretçisi.
size_t _size Yığın girişinin boyutu.
int _useflag Yığın girişinin kullanımda olup olmadığını gösteren bayrak.

döndürülen çağrısı, alandaki girişin boyutunu depolar ve alanı ya da _FREEENTRY _USEDENTRY olarak ayarlar _useflag (her ikisi de Malloc.h içinde tanımlanan sabitlerdir)._size _heapwalk _HEAPOK Yığındaki ilk giriş hakkında bu bilgileri almak için, üyesi olan NULL_pentry bir yapıya bir _HEAPINFO işaretçi geçirin_heapwalk. İşletim sistemi desteklemiyorsa_heapwalk, işlevi döndürür _HEAPEND ve olarak ENOSYSayarlarerrno.

Bu işlev parametresini doğrular. Boş bir işaretçiyseentryinfo, parametre doğrulamasında açıklandığı gibi geçersiz parametre işleyicisi çağrılır. Yürütmenin devam etmesi için izin verilirse, errno olarak ayarlanır EINVAL ve işlevi döndürür _HEAPBADPTR.

Gereksinimler

Yordam Gerekli başlık İsteğe bağlı üst bilgi
_heapwalk <malloc.h> <errno.h>

Daha fazla uyumluluk bilgisi için bkz . Uyumluluk.

Örnek

// 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("%8s 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;
    }
}
    USED block at 00310650 of size 0100
    USED block at 00310758 of size 0800
    USED block at 00310F60 of size 0080
    FREE block at 00310FF0 of size 0398
    USED block at 00311390 of size 000D
    USED block at 003113A8 of size 00B4
    USED block at 00311468 of size 0034
    USED block at 003114A8 of size 0039
...
    USED block at 00312228 of size 0010
    USED block at 00312240 of size 1000
    FREE block at 00313250 of size 1DB0
OK - end of heap

Ayrıca bkz.

Bellek ayırma
_heapadd
_heapchk
_heapmin
_heapset