_set_invalid_parameter_handler

CRT が無効な引数を検出した場合に呼び出す関数を設定します。

_invalid_parameter_handler _set_invalid_parameter_handler(
   _invalid_parameter_handler pNew
);

パラメーター

  • [入力] pNew
    新しい無効なパラメーター ハンドラーへの関数ポインター。

戻り値

呼び出しの前の無効なパラメーター ハンドラーへのポインター。

解説

多くの C ランタイム関数は、渡された引数の有効性をチェックします。 無効な引数が渡されると、関数は errno にエラー番号を設定するか、エラー コードを返します。 その場合、無効なパラメーター ハンドラーも呼び出されます。 この関数を使用すると、このハンドラーを別の関数に設定できます。 無効な引数のハンドラーに一度に指定できる関数は 1 つだけです。

フレームワークが無効なパラメーター関数を呼び出した場合、通常は回復不可能なエラーが発生したことを示します。 無効なパラメーター関数では、できるだけデータを保存してから、処理を中止する必要があります。 エラーが回復可能であることが確実でない限り、main 関数に制御を戻さないでください。

無効なパラメーター ハンドラーの関数には、次のプロトタイプが必要です。

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

最初の引数は引数式です。 2 番目の引数は、無効な引数を受け取った CRT 関数の名前です。 3 番目の引数は、CRT ソースのファイル名です。 4 番目の引数は、そのファイルの行数です。 最後の引数は予約されています。 すべてのパラメーターの値は、CRT ライブラリのデバッグ バージョンを使用する場合を除いて、NULL になっています。

必要条件

ルーチン

必須ヘッダー

_set_invalid_parameter_handler

<stdlib.h>

互換性の詳細については、「C ランタイム ライブラリ」の「互換性」を参照してください。

使用例

無効なパラメーター エラーのハンドラーを使用して、無効なパラメーターを受け取った関数、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);
}
      

参照

参照

CRT 関数のセキュリティが強化されたバージョン

errno、_doserrno、_sys_errlist、および _sys_nerr