다음을 통해 공유


_set_new_handler

제어 전달 오류 처리 메커니즘에 경우는 new 연산자 메모리를 할당 하지 못했습니다.

_PNH _set_new_handler(
   _PNH pNewHandler 
);

매개 변수

  • pNewHandler
    응용 프로그램에서 제공한 메모리 처리 함수 포인터입니다.인수가 0 이면 새 처리기를 제거 하면 됩니다.

반환 값

이전 예외를 처리 하 여 등록 한 함수에 대 한 포인터를 반환 _set_new_handler, 이전 함수는 나중에 복원할 수 있도록 합니다.이전 함수가 설정 된 경우 반환 값의 기본 동작을 복원 하려면 사용할 수 있습니다. 이 값이 될 수 있습니다 NULL.

설명

C + + _set_new_handler 함수를 지정 하면 제어를 획득 하는 예외 처리 함수에서 new 연산자 메모리를 할당 하지 못했습니다.경우 new 실패 하므로 런타임 시스템 자동으로 인수로 전달 된 함수를 호출 합니다 예외 처리 _set_new_handler._PNHnew.h에 정의 된 형식을 반환 하는 함수에 대 한 포인터입니다 int 의 형식 인수를 사용 하 고 size_t.사용 size_t 할당 될 수 있는 간격을 지정할 수 있습니다.

기본 처리기가입니다.

_set_new_handler기본적으로 가비지 수집 방식이입니다.런타임 시스템 함수를 0이 아닌 값을 반환 하 고 함수는 0을 반환 하면 실패 때마다 할당을 다시 시도 합니다.

발생은 _set_new_handler 프로그램에서 함수 인수 목록에서 런타임 시스템에 지정 된 예외 처리 기능을 등록 합니다.

#include <new.h>
int handle_program_memory_depletion( size_t )
{
   // Your code
}
int main( void )
{
   _set_new_handler( handle_program_memory_depletion );
   int *pi = new int[BIG_NUMBER];
}

마지막으로 전달 된 함수 주소를 저장할 수 있습니다의 _set_new_handler 작동 하 고이 나중에 복원 합니다.

_PNH old_handler = _set_new_handler( my_handler );
   // Code that requires my_handler
   _set_new_handler( old_handler )
   // Code that requires old_handler

C + + _set_new_mode 함수에 대 한 새 처리기 모드 설정 malloc.새 처리기 모드를 나타내는 것인지, 오류가 발생 하면 malloc 으로 설정 새 처리기 루틴을 호출 하는 것 _set_new_handler.기본적으로 malloc 메모리 할당에 실패 시 새 처리기 루틴을 호출 하지 않습니다.이 기본 동작을 재정의할 수 있습니다 있도록, malloc 메모리를 할당 하지 못할 malloc 에서 동일한 새 처리기 루틴을 호출 방법을 new 연산자 같은 이유로 실패 하는 경우를 하지.기본값을 재정의 하려면 호출 합니다.

_set_new_mode(1)

초기 프로그램 또는 링크와 newmode.obj에서.

사용자 정의 하는 경우 operator new새 처리기 함수에서 오류를 자동으로 호출 되지 않습니다 제공 됩니다.

자세한 내용은 삭제C++ 언어 참조.

하나는 _set_new_handler 처리기를 동적으로 링크 된 모든 Dll 또는 실행 파일입니다. 사용자가 호출 하는 경우에 _set_new_handler 처리기가 다른 대체 될 수 있습니다 또는 다른 DLL 또는 실행 파일을 설정 하는 처리기를 대체 하는 합니다.

요구 사항

루틴

필수 헤더

_set_new_handler

<new.h>

더 많은 호환성 정보를 참조 하십시오. 호환성 소개에서 합니다.

예제

할당 오류가 발생 하는 경우이 예제에서 Mynewhandler에 제어가 전달 됩니다.Mynewhandler에 전달 된 인수는 요청 된 바이트 수입니다.Mynewhandler에서 반환 된 값을 할당을 다시 시도해 야 합니다 여부를 나타내는 플래그입니다. 0이 아닌 값 할당 합니다 수 다시 시도 나타내고 값이 0 이면 할당 실패 했습니다 나타냅니다.

// crt_set_new_handler.cpp
// compile with: /c
#include <stdio.h>
#include <new.h>
#define BIG_NUMBER 0x1fffffff

int coalesced = 0;

int CoalesceHeap()
{
   coalesced = 1;  // Flag RecurseAlloc to stop 
   // do some work to free memory
   return 0;
}
// Define a function to be called if new fails to allocate memory.
int MyNewHandler( size_t size )
{
   printf("Allocation failed. Coalescing heap.\n");

   // Call a function to recover some heap space.
   return CoalesceHeap();
}

int RecurseAlloc() {
   int *pi = new int[BIG_NUMBER];
   if (!coalesced)
      RecurseAlloc();
   return 0;
}

int main()
{
   // Set the failure handler for new to be MyNewHandler.
   _set_new_handler( MyNewHandler );
   RecurseAlloc();
}
  
  
  
  

해당 .NET Framework 항목

해당 사항 없음. 표준 C 함수를 호출할 수 있습니다 PInvoke. 자세한 내용은 플랫폼 호출 예제.

참고 항목

참조

메모리 할당

calloc

free

realloc