Walidacja parametru
Większość funkcji CRT rozszerzonych zabezpieczeń i wiele, które nie są, zweryfikuj ich parametry dla elementów, takich jak wskaźniki sprawdzania dla NULL
, że liczby całkowite należą do prawidłowego zakresu lub że wartości wyliczenia są prawidłowe. Jeśli zostanie znaleziony nieprawidłowy parametr, wywoływana jest nieprawidłowa procedura obsługi parametrów.
Nieprawidłowa procedura obsługi parametrów
Gdy funkcja biblioteki środowiska uruchomieniowego języka C wykryje nieprawidłowy parametr, przechwytuje pewne informacje o błędzie, a następnie wywołuje makro, które opakowuje nieprawidłową funkcję wysyłania procedury obsługi parametrów. Będzie to jeden z _invalid_parameter
elementów , _invalid_parameter_noinfo
lub _invalid_parameter_noinfo_noreturn
. Która funkcja dispatch jest wywoływana, zależy od tego, czy kod jest odpowiednio kompilacją debugowania, kompilacją detaliczną, czy błędem nie można odzyskać.
W kompilacjach debugowania nieprawidłowe makro parametru zwykle zgłasza niepowodzenie asercji i punkt przerwania debugera przed wywołaniem funkcji dispatch. Po uruchomieniu kodu asercji można zgłosić użytkownikowi w oknie dialogowym zawierającym "Przerwij", "Ponów próbę" i "Kontynuuj" lub podobne opcje, które zależą od systemu operacyjnego i wersji CRT. Te opcje umożliwiają użytkownikowi natychmiastowe zakończenie programu, dołączenie debugera lub zezwolenie na kontynuowanie działania istniejącego kodu, który wywołuje funkcję dispatch.
Nieprawidłowa funkcja wysyłania obsługi parametrów wywołuje aktualnie przypisaną nieprawidłową procedurę obsługi parametrów. Domyślnie nieprawidłowy parametr wywołuje _invoke_watson
metodę , co powoduje zamknięcie aplikacji i wygenerowanie mini-zrzutu. Jeśli system operacyjny jest włączony, w oknie dialogowym zostanie wyświetlony monit o wysłanie zrzutu awaryjnego do firmy Microsoft w celu analizy.
To zachowanie można zmienić przy użyciu funkcji _set_invalid_parameter_handler
lub _set_thread_local_invalid_parameter_handler
ustawić nieprawidłową procedurę obsługi parametrów na własną funkcję. Jeśli określona funkcja nie zakończy działania aplikacji, kontrolka zostanie zwrócona do funkcji, która odebrała nieprawidłowe parametry. W języku CRT te funkcje zwykle zatrzymują wykonywanie funkcji, ustawiają errno
kod błędu i zwracają kod błędu. W wielu przypadkach errno
wartość i wartość zwracana to , EINVAL
aby wskazać nieprawidłowy parametr. W niektórych przypadkach zwracany jest bardziej szczegółowy kod błędu, taki jak EBADF
w przypadku nieprawidłowego wskaźnika pliku przekazanego jako parametr.
Aby uzyskać więcej informacji na temat errno
programu , zobaczerrno
, _doserrno
, _sys_errlist
i _sys_nerr
.
Zobacz też
Funkcje zabezpieczeń w narzędziu CRT
Pliki C runtime (CRT) i C++ Standard Library (STL) .lib