_set_invalid_parameter_handler, _set_thread_local_invalid_parameter_handler

CRT가 잘못된 인수를 발견할 때 호출할 함수를 설정합니다.

구문

_invalid_parameter_handler _set_invalid_parameter_handler(
   _invalid_parameter_handler pNew
);
_invalid_parameter_handler _set_thread_local_invalid_parameter_handler(
   _invalid_parameter_handler pNew
);

매개 변수

pNew
새로운 잘못된 매개 변수 처리기에 대한 함수 포인터입니다.

반환 값

호출 이전의 잘못된 매개 변수 처리기에 대한 포인터입니다.

설명

많은 C 런타임 함수가 자신에게 전달되는 인수의 유효성을 확인합니다. 잘못된 인수가 전달될 경우 이 함수는 errno 오류 번호를 설정하거나 오류 코드를 반환할 수 있습니다. 이 경우 잘못된 매개 변수 처리기도 호출됩니다. C 런타임은 프로그램을 종료하고 런타임 오류 메시지를 표시하는 기본 전역 잘못된 매개 변수 처리기를 제공합니다. _set_invalid_parameter_handler를 사용하면 고유한 함수를 전역 잘못된 매개 변수 처리기로 설정할 수 있습니다. 또한 C 런타임은 스레드 로컬 잘못된 매개 변수 처리기도 지원합니다. 스레드 로컬 매개 변수 처리기는 _set_thread_local_invalid_parameter_handler를 사용하여 스레드에서 설정됩니다. 스레드에서 호출된 C 런타임 함수는 전역 처리기가 아닌 이 처리기를 사용합니다. 한 번에 하나의 함수만 전역 잘못된 인수 처리기로 지정할 수 있습니다. 스레드당 하나의 함수만 스레드 로컬 잘못된 인수 처리기로 지정할 수 있지만, 각 스레드의 스레드 로컬 처리기는 서로 다를 수 있습니다. 스레드 로컬 처리기를 사용하면 다른 스레드의 동작에 영향을 주지 않고 코드의 한 부분에서 사용되는 처리기를 변경할 수 있습니다.

런타임이 잘못된 매개 변수 함수를 호출할 때 이는 일반적으로 복구할 수 없는 오류가 발생했음을 의미합니다. 직접 제공하는 잘못된 매개 변수 처리기 함수는 저장할 수 있는 모든 데이터를 저장한 다음 중단되어야 하며, 오류를 복구할 수 있다고 확신하지 않는 한 컨트롤을 기본 함수로 반환해서는 안 됩니다.

잘못된 매개 변수 처리기 함수에는 다음과 같은 프로토타입이 있어야 합니다.

void _invalid_parameter(
   const wchar_t * expression,
   const wchar_t * function,
   const wchar_t * file,
   unsigned int line,
   uintptr_t pReserved
);

expression 인수는 오류를 발생시킨 인수 식의 와이드 문자열 표현입니다. function 인수는 잘못된 인수를 받은 CRT 함수의 이름입니다. file 인수는 함수가 포함된 CRT 소스 파일의 이름입니다. line 인수는 해당 파일의 줄 번호입니다. 마지막 인수는 예약되어 있습니다. CRT 라이브러리의 디버그 버전이 사용되지 않는 한 모든 매개 변수에 NULL 값이 있습니다.

기본적으로 이 함수의 전역 상태는 애플리케이션으로 범위가 지정됩니다. 이 동작을 변경하려면 CRT의 전역 상태를 참조하세요.

요구 사항

루틴에서 반환된 값 필수 헤더
_set_invalid_parameter_handler, _set_thread_local_invalid_parameter_handler C: <stdlib.h>

C++: <cstdlib> 또는 <stdlib.h>

_set_invalid_parameter_handler_set_thread_local_invalid_parameter_handler 함수는 Microsoft 전용입니다. 호환성에 대한 자세한 내용은 호환성을 참조하세요.

예시

다음 예제에서는 잘못된 매개 변수 오류 처리기를 사용하여 잘못된 매개 변수를 받은 함수와 CRT 소스의 파일 및 줄을 출력합니다. 디버그 CRT 라이브러리를 사용하는 경우 잘못된 매개 변수 오류로 인해 어설션도 발생하며, 이 예제에서는 이 예제에서 사용할 수 없습니다 _CrtSetReportMode.

// crt_set_invalid_parameter_handler.c
// compile with: /Zi /MTd
#include <stdio.h>
#include <stdlib.h>
#include <crtdbg.h>  // For _CrtSetReportMode

void myInvalidParameterHandler(const wchar_t* expression,
   const wchar_t* function,
   const wchar_t* file,
   unsigned int line,
   uintptr_t pReserved)
{
   wprintf(L"Invalid parameter detected in function %s."
            L" File: %s Line: %d\n", function, file, line);
   wprintf(L"Expression: %s\n", expression);
   abort();
}

int main( )
{
   char* formatString;

   _invalid_parameter_handler oldHandler, newHandler;
   newHandler = myInvalidParameterHandler;
   oldHandler = _set_invalid_parameter_handler(newHandler);

   // Disable the message box for assertions.
   _CrtSetReportMode(_CRT_ASSERT, 0);

   // Call printf_s with invalid parameters.

   formatString = NULL;
   printf(formatString);
}
Invalid parameter detected in function common_vfprintf. File: minkernel\crts\ucrt\src\appcrt\stdio\output.cpp Line: 32
Expression: format != nullptr

참고 항목

_get_invalid_parameter_handler, _get_thread_local_invalid_parameter_handler
보안이 강화된 CRT 함수 버전
errno, _doserrno, _sys_errlist_sys_nerr