_set_invalid_parameter_handler
Устанавливает функцию для вызова, когда CRT обнаруживает недопустимый аргумент.
_invalid_parameter_handler _set_invalid_parameter_handler(
_invalid_parameter_handler pNew
);
Параметры
- [входящий] pNew
Указатель на функцию нового обработчик недопустимого параметра.
Возвращаемое значение
Указатель на обработчик недопустимого параметра до вызова.
Заметки
Многие функции среды выполнения C проверяют допустимость аргументов, передаваемых в них. Если передается недопустимый аргумент, функция может установить номер ошибки errno или вернуть код ошибки. В таких случаях также вызывается обработчик недопустимого параметра. Эта функция позволяет установить этому обработчику другую функцию. Только одну функцию можно указать в качестве обработчика недопустимых аргументов единовременно.
Когда платформа вызывает функцию обработки недопустимого параметра, это обычно означает, что возникла неисправимая ошибка. Функция обработки недопустимого параметра должна сохранить все данные, которые возможно сохранить, и затем прерваться. Она не должна возвращать управление функции main, если вы не уверены, что ошибка исправима.
Функция обработчика недопустимого параметра должна иметь следующий прототип:
void _invalid_parameter(
const wchar_t * expression,
const wchar_t * function,
const wchar_t * file,
unsigned int line,
uintptr_t pReserved
);
Первый аргумент — выражение аргумента. Второй аргумент — имя функции CRT, которая получила недопустимый аргумент. Третий аргумент — имя файла в источнике CRT. Четвертый аргумент — строка в этом файле. Последний аргумент зарезервирован. Все параметры имеют значение NULL, если не используется отладочная версия библиотеки CRT.
Требования
Подпрограмма |
Обязательный заголовок |
---|---|
_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);
}