Share via


_set_invalid_parameter_handler

CRT가 잘못된 매개변수를 찾을때 호출된 함수를 설정합니다.

_invalid_parameter_handler _set_invalid_parameter_handler(
   _invalid_parameter_handler pNew
);

매개 변수

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

반환 값

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

설명

대부분의 C 런타임 함수는 전달된 인수의 유효성을 확인합니다. 만약 잘못된 인수가 전달되면, 이 함수는 errno 오류 번호를 설정하거나 오류 코드를 반환할 수 있습니다. 이 경우, 잘못된 매개변수 처리기 역시 호출됩니다. 이 함수는 다른 함수로 설정되는 처리기를 허용합니다. 오직 한 함수만 한번에 잘못된 매개변수 처리기로써 지정될 수 있습니다.

프레임워크는 잘못된 매개변수 함수를 호출할 때, 이것은 일반적으로 복구할 수 없는 오류가 발생했음을 의미합니다. 잘못된 매개변수 함수는 저장할 수 있는 모든 데이터를 저장하고 중단합니다. 이 오류를 복구할 수 있는지가 확실하지 않으면, 컨트롤 메인 함수를 반환하지 말아야합니다.

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

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

첫번째 인수는 인수 표현입니다. 두 번째 인수는 잘못된 인수를 받는 CRT 함수의 이름입니다. 세 번째 인수는 CRT 소스에서 파일이름입니다. 네 번째 인수는 파일에서의 줄번호입니다. 마지막 인수는 예약되어 있습니다. CRT 라이브러리의 디버그 버전을 사용하지 않으면, 모든 매개 변수는 NULL 값을 가집니다.

요구 사항

루틴

필수 헤더

_set_invalid_parameter_handler

<stdlib.h>

호환성에 대한 자세한 내용은 소개 단원의 호환성 부분을 참조하십시오.

예제

다음 예제에서, 잘못된 매개변수 오류 처리기는 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);
}
       

참고 항목

참조

보안이 강화된 CRT 함수 버전

errno, _doserrno, _sys_errlist 및 _sys_nerr