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