_heapwalk
Yığında gezer ve sonraki giriş hakkında bilgi getirir.
Ö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.