_set_invalid_parameter_handler

設定當 CRT 偵測到無效的引數呼叫函式。

_invalid_parameter_handler _set_invalid_parameter_handler(
   _invalid_parameter_handler pNew
);

參數

  • [in] pNew
    新的不正確的參數處理常式函式指標。

傳回值

變數的指標,在呼叫之前,不正確的參數處理常式。

備註

許多 c 執行階段函式會檢查傳遞給它們的引數有效。如果傳遞了無效的引數,則可以設定在函式errno的錯誤代碼或傳回一個錯誤碼。在這種情況下,也稱為不正確的參數處理常式。這個函式會讓該處理常式,將它設定為另一個函式。只有一個函式可指定為 [無效的引數處理常式,一次。

當架構會呼叫不正確的參數的函式時,它通常表示無法復原的錯誤發生。不正確的參數的函式應該儲存任何資料,它可以,則請中止。它不應傳回給主要的函式控制項,除非您有自信是可復原的錯誤。

不正確的參數處理常式函式必須具有下列原型:

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

第一個引數是引數的運算式。第二個引數是接收到無效的引數的 CRT 函式名稱。第三個引數是 CRT 來源中的檔案名稱。第四個引數是在該檔案中。保留最後一個引數。所有參數都有值NULL除非使用 CRT 程式庫的偵錯版本。

需求

常式

所需的標頭

_set_invalid_parameter_handler

<stdlib.h>

如需相容性資訊,請參閱相容性在簡介中。

範例

在下列範例中,不正確的參數錯誤處理常式用來列印不正確的參數和檔案和行榮獲 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