다음을 통해 공유


_CrtSetAllocHook

클라이언트 정의 할당 함수를 C 런타임 디버그 메모리 할당 프로세스에 연결함으로써 설치합니다(디버그 버전에만 해당).

구문

_CRT_ALLOC_HOOK _CrtSetAllocHook(
   _CRT_ALLOC_HOOK allocHook
);

매개 변수

allocHook
C 런타임 디버그 메모리 할당 프로세스에 연결할 새로운 클라이언트 정의 할당 함수입니다.

반환 값

이전에 정의된 할당 후크 함수를 반환하거나 allocHookNULL인 경우 NULL을 반환합니다.

설명

_CrtSetAllocHook를 사용하면 애플리케이션이 고유한 할당 함수를 C 런타임 디버그 라이브러리 메모리 할당 프로세스에 연결할 수 있습니다. 결과적으로 메모리 블록을 할당, 재할당 또는 해제하기 위해 디버그 할당 함수를 호출할 때마다 애플리케이션의 후크 함수 호출이 트리거됩니다. _CrtSetAllocHook는 애플리케이션에서 메모리 부족 상황을 처리하는 방식을 테스트하기 위한 쉬운 방법, 할당 패턴을 검사하는 기능 및 향후 분석을 위해 할당 정보를 기록할 기회를 애플리케이션에 제공합니다. _DEBUG가 정의되지 않은 경우 전처리 중에 _CrtSetAllocHook에 대한 호출이 제거됩니다.

_CrtSetAllocHook 함수는 allocHook에 지정된 새로운 클라이언트 정의 할당 함수를 설치하고 이전에 정의된 후크 함수를 반환합니다. 다음 예제에서는 클라이언트 정의 할당 후크가 어떻게 프로토타입화되어야 하는지 보여 줍니다.

int YourAllocHook( int allocType, void *userData, size_t size,
                   int blockType, long requestNumber,
                   const unsigned char *filename, int lineNumber);

인수는 allocType 할당의 후크 함수에 대한 호출을 트리거한 할당 작업 유형(_HOOK_ALLOC_HOOK_REALLOC_HOOK_FREE)을 지정합니다. 트리거 할당 형식이 _HOOK_FREE인 경우 userData는 해제하려는 메모리 블록의 사용자 데이터 섹션에 대한 포인터입니다. 그러나 트리거 할당 유형이 _HOOK_ALLOC 있거나 _HOOK_REALLOCuserData 메모리 블록이 아직 할당되지 않았기 때문입니다NULL.

size는 메모리 블록의 크기를 바이트 단위로 지정하고, blockType은 메모리 블록의 형식을 나타내며, requestNumber는 메모리 블록의 개체 할당 순서 번호이고, 사용 가능한 경우 filenamelineNumber는 트리거 할당 작업이 시작된 소스 파일 이름 및 줄 번호를 지정합니다.

후크 함수에서 프로세스가 완료되면 후크 함수는 부울 값을 반환해야 합니다. 이를 통해 기본 C 런타임 할당 프로세스에 계속 진행하는 방식을 알려 줍니다. 후크 함수가 후크 함수가 호출되지 않은 것처럼 기본 할당 프로세스를 계속하려면 후크 함수가 반환 TRUE되어야 하므로 원래 트리거 할당 작업이 실행됩니다. 후크 함수는 디버그 힙의 현재 할당 작업 또는 상태를 방해하지 않고 나중에 분석할 수 있는 할당 정보를 수집하고 저장할 수 있습니다.

트리거 할당 작업이 호출되어 실패한 것처럼 후크 함수에서 기본 할당 프로세스를 계속 진행하려는 경우 후크 함수가 FALSE를 반환해야 합니다. 후크 함수는 광범위한 메모리 조건 및 디버그 힙 상태를 시뮬레이션하여 애플리케이션이 각 상황을 처리하는 방법을 테스트할 수 있습니다.

후크 함수를 지우려면 _CrtSetAllocHookNULL을 전달합니다.

다른 메모리 관리 함수와 함께 사용할 수 있는 방법 _CrtSetAllocHook 또는 고유한 클라이언트 정의 후크 함수를 작성하는 방법에 대한 자세한 내용은 디버그 후크 함수 쓰기를 참조하세요.

참고 항목

_CrtSetAllocHook는 /clr:pure에서 지원되지 않습니다. /clr:pure/clr:safe 컴파일러 옵션은 Visual Studio 2015에서 더 이상 사용되지 않으며 Visual Studio 2017에서 제거됩니다.

요구 사항

루틴에서 반환된 값 필수 헤더
_CrtSetAllocHook <crtdbg.h>

호환성에 대한 자세한 내용은 호환성을 참조하세요.

라이브러리

C 런타임 라이브러리의 디버그 버전만 해당됩니다.

예시

사용 _CrtSetAllocHook방법에 대한 샘플은 다음을 참조하세요 crt_dbg2.

참고 항목

디버그 루틴
_CrtGetAllocHook