Поделиться через


Проверка параметров

Большинство функций CRT с расширенными безопасностью, и многие из них не являются, проверяют их параметры для таких элементов, как контрольные NULLуказатели для , что целые числа попадают в допустимый диапазон или что значения перечисления являются допустимыми. Если найден недопустимый параметр, вызывается обработчик недопустимых параметров.

Подпрограмма обработчика недопустимых параметров

Если функция библиотеки среды выполнения C обнаруживает недопустимый параметр, он записывает некоторые сведения об ошибке, а затем вызывает макрос, который упаковывает недопустимую функцию диспетчера параметров. Что будет одним из _invalid_parameter, _invalid_parameter_noinfoили _invalid_parameter_noinfo_noreturn. Какая функция диспетчеризации вызывается, зависит от того, является ли код, соответственно, отладочной сборкой, розничной сборкой или ошибкой не считается восстанавливаемой.

В сборках отладки макрос недопустимых параметров обычно вызывает сбой утверждения и точку останова отладчика перед вызовом функции диспетчера. При выполнении кода утверждение может быть сообщено пользователю в диалоговом окне, в котором есть "Прерывание", "Повтор" и "Продолжить" или аналогичные варианты, зависящие от операционной системы и версии CRT. Эти параметры позволяют пользователю немедленно завершить программу, подключить отладчик или разрешить существующему коду продолжать выполнение, которое вызывает функцию диспетчера.

Недопустимая функция диспетчера параметров вызывает назначенный в данный момент обработчик недопустимых параметров. По умолчанию вызывает _invoke_watsonнедопустимый параметр, который приводит к закрытию приложения и созданию мини-дампа. Если она включена операционной системой, диалоговое окно просит пользователя отправить аварийный дамп в Корпорацию Майкрософт для анализа.

Это поведение можно изменить с помощью функций _set_invalid_parameter_handler или _set_thread_local_invalid_parameter_handler задать обработчик недопустимых параметров для собственной функции. Если указанная функция не завершает приложение, элемент управления возвращается функции, которая получила недопустимые параметры. В CRT эти функции обычно останавливают выполнение функции, задают errno код ошибки и возвращают код ошибки. Во многих случаях errno значение и возвращаемое значение являются EINVALобоими, чтобы указать недопустимый параметр. В некоторых случаях возвращается более конкретный код ошибки, например EBADF, соответствующий указателю на неправильный файл, переданному как параметр.

Дополнительные сведения о errno, см. в разделеerrno , _doserrnoи _sys_nerr_sys_errlist.

См. также

Функции безопасности в CRT
Файлы среды выполнения C (CRT) и стандартной библиотеки C++ (STL) .lib