在下面的代码中,我想根据Microsoft Page关于异常处理模型 catch(...)捕获异步和同步异常>。
我还将“异常处理模型”设置为最高Yes with SEH Exceptions (/EHa)
。
我分别以以下状态测试了代码:
当我在未分配的char*
(char *c;
)中复制字符串时,可以在catch (...)
部分中捕获其异常。 (但是我知道这是未定义的行为!)
但是当我在一个字符数组中复制一个字符串(该字符串大于数组大小)时,我无法捕获任何异常!
< / li>在第二状态下,调试时出现访问冲突错误。但是为什么不能像第一种状态那样捕获它的异常?
我尝试了另一种解决方案,如:
但是问题仍然存在。
这是我的代码(我在未分配的strcpy()
和一个字符数组上测试了char*
)
int main()
{
char c[3] = { 0 }; // Cannot catch any exception
//char *c; // Can catch exception
try
{
strcpy(c, "abcdefghijklmnopqrstuvwxyz1234567890");
}
catch (...)
{
cout << "Undefined behavior!" << endl;
}
return 0;
}
答案 0 :(得分:0)
访问冲突不需要引发异常。
这里有未定义的行为。根据{{3}}
的文档如果dest数组不够大,则行为不确定。如果字符串重叠,则行为不确定。