Проверка параметров
Большинство функций 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