共用方式為


_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