Share via


_set_invalid_parameter_handler

更新 : 2007 年 11 月

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

_invalid_parameter_handler _set_invalid_parameter_handler(
      _invalid_parameter_handler pNew
);

パラメータ

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

戻り値

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

解説

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

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

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);
}


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 printf. File: printf.c Line: 54
Expression: (format != NULL)

参照

参照

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

errno、_doserrno、_sys_errlist、および _sys_nerr