_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새 처리기 함수에서 오류를 자동으로 호출 되지 않습니다 제공 됩니다.
하나는 _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. 자세한 내용은 플랫폼 호출 예제.