_heapwalk
Melintasi tumpukan dan mengembalikan informasi tentang entri berikutnya.
Penting
API ini tidak dapat digunakan dalam aplikasi yang dijalankan di Windows Runtime kecuali dalam build Debug. Untuk informasi selengkapnya, lihat Fungsi CRT yang tidak didukung di aplikasi Platform Windows Universal.
Sintaks
int _heapwalk( _HEAPINFO *entryinfo );
Parameter
entryinfo
Buffer untuk berisi informasi timbunan.
Nilai hasil
_heapwalk
mengembalikan salah satu konstanta manifes bilangan bulat berikut yang ditentukan dalam Malloc.h.
Nilai hasil | Makna |
---|---|
_HEAPBADBEGIN |
Informasi header awal tidak valid atau tidak ditemukan. |
_HEAPBADNODE |
Timbunan rusak atau node buruk ditemukan. |
_HEAPBADPTR |
Bidang _pentry _HEAPINFO struktur tidak berisi penunjuk yang valid ke dalam tumpukan atau entryinfo merupakan penunjuk null. |
_HEAPEND |
Akhir timbunan berhasil dicapai. |
_HEAPEMPTY |
Timbunan tidak diinisialisasi. |
_HEAPOK |
Sejauh ini tidak ada kesalahan; entryinfo diperbarui dengan informasi tentang entri timbunan berikutnya. |
Selain itu, jika terjadi kesalahan, _heapwalk
atur errno
ke ENOSYS
.
Keterangan
Fungsi ini _heapwalk
membantu men-debug masalah terkait timbunan dalam program. Fungsi ini berjalan melalui tumpukan, melintas satu entri per panggilan, dan mengembalikan penunjuk ke struktur jenis _HEAPINFO
yang berisi informasi tentang entri tumpukan berikutnya. Jenis, _HEAPINFO
yang didefinisikan dalam Malloc.h, berisi elemen berikut.
Bidang | Makna |
---|---|
int *_pentry |
Penunjuk entri timbunan. |
size_t _size |
Ukuran entri tumpukan. |
int _useflag |
Bendera yang menunjukkan apakah entri tumpukan sedang digunakan. |
Panggilan ke _heapwalk
yang mengembalikan _HEAPOK
menyimpan ukuran entri di _size
bidang dan mengatur _useflag
bidang menjadi atau _FREEENTRY
_USEDENTRY
(keduanya adalah konstanta yang ditentukan dalam Malloc.h). Untuk mendapatkan informasi ini tentang entri pertama dalam tumpukan, berikan _heapwalk
penunjuk ke _HEAPINFO
struktur yang anggotanya adalah .NULL
_pentry
Jika sistem operasi tidak mendukung _heapwalk
, fungsi mengembalikan _HEAPEND
dan mengatur errno
ke ENOSYS
.
Fungsi ini memvalidasi parameternya. Jika entryinfo
adalah penunjuk null, handler parameter yang tidak valid dipanggil, seperti yang dijelaskan dalam Validasi parameter. Jika eksekusi diizinkan untuk melanjutkan, errno
diatur ke EINVAL
dan fungsi mengembalikan _HEAPBADPTR
.
Persyaratan
Rutin | Header yang diperlukan | Header opsional |
---|---|---|
_heapwalk |
<malloc.h> | <errno.h> |
Untuk informasi kompatibilitas selengkapnya, lihat Kompatibilitas.
Contoh
// 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
Baca juga
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk