_heapwalk

Yığında gezer ve sonraki giriş hakkında bilgi getirir.

Önemli notÖnemli

Bu API, Hata ayıklama yapıları hariç, Windows Çalışma Zamanı'nda yürütülen uygulamalarda kullanılamaz.Daha fazla bilgi için bkz /ZW ile desteklenmeyen CRT işlevleri.

int _heapwalk( 
   _HEAPINFO *entryinfo 
);

Parametreler

  • entryinfo
    Yığın bilgilerini içeren arabellek.

Dönüş Değeri

Malloc.h öğesinde tanımlanan tam sayı bildirim sabitlerinden birini _heapwalk döndürür.

  • _HEAPBADBEGIN
    İlk üstbilgi bilgileri geçersiz veya bulunamadı.

  • _HEAPBADNODE
    Yığın zarar görmüş veya bozuk düğümü bulundu.

  • _HEAPBADPTR
    _HEAPINFO yapısının _pentry alanı geçerli bir işaretçiyi yığına almaz veya entryinfo boş bir işaretçidir.

  • _HEAPEND
    Yığının sonuna başarıyla ulaşıldı.

  • _HEAPEMPTY
    Yığın başlatılmadı.

  • _HEAPOK
    Şu ana kadar hiç hata yok; entryinfo sonraki yığın giriş hakkındaki bilgilerle güncelleştirilir.

Ayrıca, bir hata oluşursa _heapwalkerrno değişkenini ENOSYS olarak ayarlar.

Notlar

_heapwalk işlevi, programlardaki yığınla ilişkili sorunlarda hata ayıklamaya yardımcı olur.İşlev yığın içerisinde kılavuzluk eder, çağrı başına bir girişe geçiş yapar ve bir sonraki yığın girişi ile ilgili bilgileri içeren _HEAPINFO türü yapısına bir işaretleyici geri döndürür.Malloc.h içinde tanımlı _HEAPINFO türü, aşağıdaki öğeleri içerir.

  • int *_pentry
    Yığın giriş işaretçisi.

  • size_t _size
    Yığın girişinin boyutu.

  • int _useflag
    Yığın girdinin kullanımda olup olmadığını gösteren bayrak.

_HEAPOK öğesini döndüren _heapwalk çağrısı, girişin boyutunu _size alanında depolar ve _useflag alanını _FREEENTRY veya _USEDENTRY (ikisi de Malloc.h öğesinde tanımlanan sabit değerlerdir) öğelerine ayarlar.Yığındaki ilk girişle ilgili bu bilgiyi elde etmek için, _heapwalk bir işaretçiyi _pentry üyesi NULL olan bir _HEAPINFO yapısına geçirin.İşletim sistemi _heapwalkdesteklemiyorsa (örneğin, Windows 98), işlev _HEAPEND döndürür ve errno değişkenini ENOSYS olarak ayarlar.

Bu işlev, parametresini doğrular.entryinfo bir null işaretçiyse, Parametre Doğrulama bölümünde açıklandığı gibi geçersiz parametre işleyicisi çağrılır.Yürütmenin devam etmesine izin verilirse, errno öğesi EINVAL olarak ayarlanır ve işlev _HEAPBADPTR döndürür.

Gereksinimler

Yordam

Gerekli başlık

İsteğe bağlı üst bilgi

_heapwalk

<malloc.h>

<errno.h>

Daha fazla ek uyumluluk bilgileri 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("%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 Eşdeğeri

Uygulanamaz. Standart C işlevini çağırmak için PInvoke kullanın. Daha fazla bilgi için bkz. Platform Çağırma Örnekleri.

Ayrıca bkz.

Başvuru

Bellek Ayırma

_heapadd

_heapchk

_heapmin

_heapset