// 捕获参数错误异常
// VC 2008
// 编译选项:
// 启用C++异常: /EHa
#include "stdafx.h"
#include "assert.h"
#include <excpt.h>
#include <crtdbg.h>
#include <Dbghelp.h>
#pragma comment(lib, "Dbghelp.lib")
void new_invalid_parameter_handler(
const wchar_t * expression,
const wchar_t * function,
const wchar_t * file,
unsigned int line,
uintptr_t pReserved
)
{
printf("错误发生/n");
throw 1;
}
int _tmain(int argc, _TCHAR* argv[])
{
// 设置参数错误处理函数
_invalid_parameter_handler old = _set_invalid_parameter_handler(new_invalid_parameter_handler);
// 禁止_DEBUG时候调试器捕获错误弹出对话框
// 如果没有这句, 会出现对话框, 选择 "忽略" 可以继续运行
_CrtSetReportMode(_CRT_ASSERT, 0);
char ch1[20];
char ch2[20];
memset(ch1, 'A', sizeof(ch1));
memset(ch2, 'B', sizeof(ch2));
// 出错
try
{
int iLen = sprintf_s(ch1, sizeof(ch1), ch2);
printf("字符串长度: %d./n", iLen);
}
catch (int& iE)
{
printf("捕获异常 iE = %d./n", iE);
}
printf("程序结束./n");
_invalid_parameter_handler my = _set_invalid_parameter_handler(old);
return 0;
}
// 运行输出:
// 错误发生
// 捕获异常 iE = 1.
// 程序结束.