_heapwalk
힙 순회 하 고 항목에 대 한 정보를 반환 합니다.
중요 |
---|
이 API는 제외 하 고 Windows 런타임 디버그 빌드에서 실행 되는 응용 프로그램에서 사용할 수 없습니다.자세한 내용은 /zw에 지원 되는 CRT 함수. |
int _heapwalk(
_HEAPINFO *entryinfo
);
매개 변수
- entryinfo
힙 정보를 포함 하는 버퍼입니다.
반환 값
_heapwalkMalloc.h에 정의 된 다음 정수 매니페스트 상수 중 하나를 반환 합니다.
_HEAPBADBEGIN
초기 헤더 정보가 잘못 되었거나 찾을 수 없습니다._HEAPBADNODE
힙 손상 또는 잘못 된 노드를 찾을 수 있습니다._HEAPBADPTR
_pentry필드는 _HEAPINFO 구조는 힙을 유효한 포인터 포함 되지 않은 또는 entryinfo 은 null 포인터입니다._HEAPEND
힙의 끝에 도달 했습니다._HEAPEMPTY
초기화 되지 않은 힙입니다._HEAPOK
오류 없이 지금까지. entryinfo다음 힙 항목에 대 한 정보가 업데이트 됩니다.
또한 오류가 발생 하는 경우 _heapwalk 설정 errno 에 ENOSYS.
설명
_heapwalk 함수는 데 도움이 됩니다 프로그램의 힙 관련 문제를 디버그 합니다.함수 호출에 한 항목씩 탐색 힙의 안내 및 형식 구조에 대 한 포인터를 반환 _HEAPINFO 다음 힙 항목에 대 한 정보를 포함 합니다._HEAPINFO Malloc.h에 정의 된 형식에는 다음과 같은 요소가 포함 되어 있습니다.
int *_pentry
힙 항목 포인터입니다.size_t _size
힙 항목의 크기입니다.int _useflag
힙 항목이 사용 중인지 여부를 나타내는 플래그입니다.
호출 _heapwalk 반환 _HEAPOK 저장 항목의 크기는 _size 필드 및 집합의 _useflag 필드 중 하나를 _FREEENTRY 또는 _USEDENTRY (Malloc.h에 정의 된 상수 통칭).이 힙의 첫 번째 항목에 대 한이 정보를 얻기 위해 통과 _heapwalk 에 대 한 포인터는 _HEAPINFO 구조체 _pentry 구성원 인 NULL.운영 체제에서 지원 하지 않는 경우 _heapwalk (예: Windows 98) 함수를 반환 합니다. _HEAPEND 및 설정 errno 에 ENOSYS.
이 함수는 매개 변수를 확인합니다.경우 entryinfo 는 null 포인터에 설명 된 대로 잘못 된 매개 변수 처리기를 호출 매개 변수 유효성 검사.실행을 계속 하려면 허용 되는 경우 errno 로 설정 된 EINVAL 함수를 반환 하 고 _HEAPBADPTR.
요구 사항
루틴 |
필수 헤더 |
선택적 헤더 |
---|---|---|
_heapwalk |
<malloc.h> |
<errno.h> |
자세한 호환성에 대 한 내용은 호환성 소개에서 합니다.
예제
// 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 항목
해당 사항 없음. 표준 C 함수를 호출 하려면 PInvoke. 자세한 내용은 플랫폼 호출 예제.