Udostępnij za pośrednictwem


_set_invalid_parameter_handler, _set_thread_local_invalid_parameter_handler

Ustawia funkcję do wywołania, gdy CRT wykryje nieprawidłowy argument.

Składnia

_invalid_parameter_handler _set_invalid_parameter_handler(
   _invalid_parameter_handler pNew
);
_invalid_parameter_handler _set_thread_local_invalid_parameter_handler(
   _invalid_parameter_handler pNew
);

Parametry

pNew
Wskaźnik funkcji na nową nieprawidłową procedurę obsługi parametrów.

Wartość zwracana

Wskaźnik do nieprawidłowej procedury obsługi parametrów przed wywołaniem.

Uwagi

Wiele funkcji środowiska uruchomieniowego języka C sprawdza poprawność przekazanych do nich argumentów. Jeśli przekazano nieprawidłowy argument, funkcja może ustawić errno numer błędu lub zwrócić kod błędu. W takich przypadkach wywoływana jest również nieprawidłowa procedura obsługi parametrów. Środowisko uruchomieniowe języka C dostarcza domyślną globalną procedurę obsługi nieprawidłowych parametrów, która kończy program i wyświetla komunikat o błędzie środowiska uruchomieniowego. Możesz użyć polecenia , _set_invalid_parameter_handler aby ustawić własną funkcję jako globalną procedurę obsługi nieprawidłowych parametrów. Środowisko uruchomieniowe języka C obsługuje również lokalną procedurę obsługi nieprawidłowych parametrów wątku. Jeśli program obsługi parametrów lokalnych wątku jest ustawiany w wątku przy użyciu funkcji _set_thread_local_invalid_parameter_handlerśrodowiska uruchomieniowego języka C wywoływanych z wątku, zamiast procedury obsługi globalnej. Jednocześnie można określić tylko jedną funkcję jako globalną nieprawidłową procedurę obsługi argumentów. Tylko jedna funkcja może być określona jako lokalna nieprawidłowa procedura obsługi argumentów wątku na wątek, ale różne wątki mogą mieć różne programy obsługi wątków lokalnych. Lokalne programy obsługi wątków umożliwiają zmianę programu obsługi używanego w jednej części kodu bez wpływu na zachowanie innych wątków.

Gdy środowisko uruchomieniowe wywołuje nieprawidłową funkcję parametru, zwykle oznacza to, że wystąpił nieodzyskiwalny błąd. Podano nieprawidłową funkcję obsługi parametrów, należy zapisać wszystkie dane, które mogą, a następnie przerwać. Nie powinna zwracać kontroli do funkcji main, chyba że masz pewność, że błąd można odzyskać.

Nieprawidłowa funkcja obsługi parametrów musi mieć następujący prototyp:

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

Argument expression jest szeroką reprezentacją ciągu wyrażenia argumentu, które wywołało błąd. Argument function jest nazwą funkcji CRT, która otrzymała nieprawidłowy argument. Argument file jest nazwą pliku źródłowego CRT, który zawiera funkcję. Argumentem line jest numer wiersza w tym pliku. Ostatni argument jest zarezerwowany. Wszystkie parametry mają wartość NULL , chyba że jest używana wersja debugowania biblioteki CRT.

Domyślnie stan globalny tej funkcji jest zakresem aplikacji. Aby zmienić to zachowanie, zobacz Stan globalny w CRT.

Wymagania

Procedura Wymagany nagłówek
_set_invalid_parameter_handler, _set_thread_local_invalid_parameter_handler C: <stdlib.h>

C++: <cstdlib> lub <stdlib.h>

Funkcje _set_invalid_parameter_handler i _set_thread_local_invalid_parameter_handler są specyficzne dla firmy Microsoft. Aby uzyskać informacje o zgodności, zobacz Zgodność.

Przykład

W poniższym przykładzie do drukowania funkcji, która otrzymała nieprawidłowy parametr, oraz pliku i wiersza w źródłach CRT jest używana nieprawidłowa procedura obsługi błędów parametrów. Gdy używana jest biblioteka CRT debugowania, nieprawidłowe błędy parametrów zgłaszają również asercji, która jest wyłączona w tym przykładzie przy użyciu polecenia _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);
}
Invalid parameter detected in function common_vfprintf. File: minkernel\crts\ucrt\src\appcrt\stdio\output.cpp Line: 32
Expression: format != nullptr

Zobacz też

_get_invalid_parameter_handler, _get_thread_local_invalid_parameter_handler
Wersje funkcji CRT z rozszerzonymi zabezpieczeniami
errno, _doserrno, _sys_errlisti _sys_nerr