다음을 통해 공유


_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. 자세한 내용은 플랫폼 호출 예제.

참고 항목

참조

메모리 할당

_heapadd

_heapchk

_heapmin

_heapset