-Parametervalidierung

Die meisten sicherheitsgestützten CRT-Funktionen und viele, die nicht sind, überprüfen ihre Parameter für Dinge wie das Überprüfen von Zeigern auf NULL, dass ganze Zahlen in einen gültigen Bereich fallen oder dass Enumerationswerte gültig sind. Wenn ein ungültiger Parameter gefunden wird, wird der ungültige Parameterhandler aufgerufen.

Ungültige Parameterhandlerroutine

Wenn eine C-Runtime-Bibliotheksfunktion einen ungültigen Parameter erkennt, erfasst sie einige Informationen zum Fehler, und ruft dann ein Makro auf, das eine ungültige Parameterhandlerverteilungsfunktion umschließt. Dies ist eine von _invalid_parameter, _invalid_parameter_noinfooder _invalid_parameter_noinfo_noreturn. Welche Versandfunktion aufgerufen wird, hängt davon ab, ob der Code ein Debugbuild, ein Einzelhandelsbuild oder der Fehler nicht als wiederherstellbar betrachtet wird.

In Debugbuilds löst das ungültige Parametermakro in der Regel eine fehlgeschlagene Assertion und einen Debugger-Haltepunkt aus, bevor die Versandfunktion aufgerufen wird. Wenn der Code ausgeführt wird, wird die Assertion möglicherweise dem Benutzer in einem Dialogfeld gemeldet, das über "Abort", "Wiederholen" und "Weiter" oder ähnliche Auswahlmöglichkeiten verfügt, die vom Betriebssystem und der CRT-Version abhängen. Mit diesen Optionen kann der Benutzer das Programm sofort beenden, einen Debugger anfügen oder den vorhandenen Code weiterhin ausführen lassen, der die Dispatch-Funktion aufruft.

Die Ungültige Parameterhandler-Versandfunktion ruft den aktuell zugewiesenen ungültigen Parameterhandler auf. Standardmäßig ruft der ungültige Parameter auf _invoke_watson, wodurch die Anwendung geschlossen und ein Miniabbild generiert. Wenn das Betriebssystem aktiviert ist, fragt ein Dialogfeld den Benutzer, ob er das Absturzabbild zur Analyse an Microsoft senden möchte.

Sie können dieses Verhalten mithilfe der Funktionen _set_invalid_parameter_handler ändern oder _set_thread_local_invalid_parameter_handler den ungültigen Parameterhandler auf Ihre eigene Funktion festlegen. Wenn die angegebene Funktion die Anwendung nicht beendet, wird das Steuerelement an die Funktion zurückgegeben, die die ungültigen Parameter empfangen hat. In der CRT werden diese Funktionen normalerweise die Funktionsausführung beenden, auf einen Fehlercode festgelegt errno und einen Fehlercode zurückgegeben. In vielen Fällen sind der errno Wert und der Rückgabewert beide EINVAL, um einen ungültigen Parameter anzugeben. In einigen Fällen wird ein spezifischerer Fehlercode zurückgegeben, wie z.B. EBADF für einen ungültigen Dateizeiger, der als Parameter übergeben wird.

Weitere Informationen zu errno, siehe errno, _doserrno, _sys_errlist, und _sys_nerr.

Siehe auch

Sicherheitsfunktionen in der CRT
C-Laufzeitdateien (CRT) und C++ Standard Library (STL) .lib