Freigeben über


_set_invalid_parameter_handler, _set_thread_local_invalid_parameter_handler

Legt eine Funktion fest, die aufzurufen ist, wenn die CRT ein ungültiges Argument erkennt.

Syntax

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

Parameter

pNew
Der Funktionszeiger auf den neuen Handler für ungültige Parameter.

Rückgabewert

Ein Zeiger auf den Handler für ungültigen Parameter vor dem Aufruf.

Hinweise

Viele C-Laufzeitfunktionen überprüfen die Gültigkeit der an sie übergebenen Argumente. Wenn ein ungültiges Argument übergeben wird, kann die Funktion die errno-Fehlernummer festlegen oder einen Fehlercode zurückgeben. In solchen Fällen wird der Handler für ungültige Parameter ebenfalls aufgerufen. Die C-Laufzeit stellt einen globalen Standardhandler für ungültige Parameter bereit, der das Programm beendet und eine Laufzeitfehlermeldung anzeigt. Sie können mit _set_invalid_parameter_handler eine eigene Funktion als globalen Handler für ungültige Parameter festlegen. Die C-Laufzeitbibliothek unterstützt auch einen threadlokalen Handler für ungültige Parameter. Wenn ein threadlokaler Handler für Parameter mithilfe von _set_thread_local_invalid_parameter_handler in einem Thread festgelegt wird, verwenden die über den Thread aufgerufenen C-Laufzeitfunktionen diesen Handler und nicht den globalen Handler. Es kann jederzeit immer nur eine Funktion als globaler Handler für ungültige Argumente angegeben werden. Nur eine Funktion kann als threadlokaler Handler für ungültige Argumente pro Thread angegeben werden, aber verschiedene Threads können über unterschiedliche threadlokale Handler verfügen. Mit lokalen Threadhandlern können Sie den in einem Teil des Codes verwendeten Handler ändern, ohne das Verhalten anderer Threads zu beeinträchtigen.

Wenn die Laufzeit die Funktion für ungültige Parameter aufruft, bedeutet dies normalerweise, dass ein nicht behebbarer Fehler aufgetreten ist. Die Funktion Handler für ungültige Parameter sollte alle Daten speichern, bei denen dies möglich ist, und dann abbrechen. Es sollte keine Steuerung an die Hauptfunktion zurückgeben, es sei denn, Sie sind sicher, dass der Fehler wiederhergestellt werden kann.

Die Handler-Funktion für ungültige Parameter muss folgenden Prototyp besitzen:

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

Das expression-Argument ist eine Darstellung einer breiten Zeichenfolge des Argumentausdrucks, der den Fehler ausgelöst hat. Das function-Argument ist der Name der CRT-Funktion, die mit einem ungültigen Argument aufgerufen wurde. Das file-Argument ist der Name der CRT-Quelldatei, die die Funktion enthält. Das line Argument ist die Nummer der Zeile in der Datei. Das letzte Argument ist reserviert. Alle Parameter haben den Wert NULL, es sei denn, es wird eine Debugversion der CRT-Bibliothek verwendet.

Standardmäßig gilt der globale Zustand dieser Funktion für die Anwendung. Wie Sie dieses Verhalten ändern, erfahren Sie unter Globaler Status in der CRT.

Anforderungen

Routine Erforderlicher Header
_set_invalid_parameter_handler, _set_thread_local_invalid_parameter_handler C: <stdlib.h>

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

Die _set_invalid_parameter_handler Funktionen sind _set_thread_local_invalid_parameter_handler microsoftspezifisch. Informationen zur Kompatibilität finden Sie unter Kompatibilität.

Beispiel

Im folgenden Beispiel wird ein Fehlerhandler für ungültige Parameter verwendet, um die Funktion zu auszugeben, die den ungültigen Parameter empfangen hat, sowie deren Dateiname und die Zeile in den CRT-Quellen. Wenn die Debug-CRT-Bibliothek verwendet wird, lösen ungültige Parameterfehler auch eine Assertion aus, die in diesem Beispiel mit _CrtSetReportModedeaktiviert ist.

// 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

Siehe auch

_get_invalid_parameter_handler, _get_thread_local_invalid_parameter_handler
Sicherheitsgestützte Versionen von CRT-Funktionen
errno, _doserrno, _sys_errlist und _sys_nerr