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