다음을 통해 공유


매개 변수 유효성 검사

보안이 강화된 대부분의 CRT 함수와 그렇지 않은 많은 함수는 포인터 검사, 정수가 유효한 범위에 속하거나 열거형 값이 유효한 것과 같은 항목에 대한 NULL매개 변수의 유효성을 검사합니다. 잘못된 매개 변수를 발견하면 잘못된 매개 변수 처리기가 호출됩니다.

잘못된 매개 변수 처리기 루틴

C 런타임 라이브러리 함수가 잘못된 매개 변수를 검색하면 오류에 대한 일부 정보를 캡처한 다음 잘못된 매개 변수 처리기 디스패치 함수를 래핑하는 매크로를 호출합니다. 이는 , _invalid_parameter_noinfo또는 _invalid_parameter_noinfo_noreturn. 중 _invalid_parameter하나가 될 것입니다. 호출되는 디스패치 함수는 코드가 각각 디버그 빌드인지, 소매 빌드인지 또는 오류가 복구 가능한 것으로 간주되지 않는지에 따라 달라집니다.

디버그 빌드에서 잘못된 매개 변수 매크로는 일반적으로 디스패치 함수가 호출되기 전에 실패한 어설션 및 디버거 중단점을 발생합니다. 코드가 실행되면 "중단", "다시 시도" 및 "계속" 또는 운영 체제 및 CRT 버전에 따라 유사한 선택 항목이 있는 대화 상자에서 사용자에게 어설션을 보고할 수 있습니다. 이러한 옵션을 사용하면 사용자가 프로그램을 즉시 종료하거나, 디버거를 연결하거나, 디스패치 함수를 호출하는 기존 코드가 계속 실행되도록 할 수 있습니다.

잘못된 매개 변수 처리기 디스패치 함수는 현재 할당된 잘못된 매개 변수 처리기를 호출합니다. 기본적으로 잘못된 매개 변수가 호출 _invoke_watson되어 애플리케이션이 닫히게 하고 미니 덤프를 생성합니다. 운영 체제에서 사용하도록 설정된 경우 사용자에게 분석을 위해 크래시 덤프를 Microsoft로 보낼 것인지 묻는 대화 상자가 표시됩니다.

함수 _set_invalid_parameter_handler 를 사용하거나 _set_thread_local_invalid_parameter_handler 잘못된 매개 변수 처리기를 사용자 고유의 함수로 설정하여 이 동작을 변경할 수 있습니다. 지정한 함수가 애플리케이션을 종료하지 않으면 잘못된 매개 변수를 받은 함수에 컨트롤이 반환됩니다. CRT에서 이러한 함수는 일반적으로 함수 실행을 중지하고, 오류 코드로 설정하고 errno , 오류 코드를 반환합니다. 대부분의 경우 errno 값과 반환 값은 모두 EINVAL잘못된 매개 변수를 나타냅니다. 경우에 따라 매개 변수로 전달된, 잘못된 파일 포인터에 대한 EBADF와 같은 보다 구체적인 오류 코드가 반환됩니다.

에 대한 errno자세한 내용은 , _doserrno, _sys_errlist_sys_nerr 를 참조하세요errno.

참고 항목

CRT의 보안 기능
C 런타임(CRT) 및 C++ STL(표준 라이브러리) .lib 파일