Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
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