无法使用 C++ catch(..) 捕获访问冲突异常

Cannot catch access violation exception by use of C++ catch(...)

本文关键字:访问冲突 异常 catch C++      更新时间:2023-10-16

在下面的代码中,我想通过使用 c++catch (...)来捕获异步和同步异常Microsoft 有关异常处理模型页面说明。

此外,我将"异常处理模型"设置为Yes with SEH Exceptions (/EHa)值。

我分别使用以下状态测试了代码:

  • 当我在未分配的char*(char *c;)中复制字符串时,我可以在catch (...)部分中捕获其异常。(但是我知道这是一种未定义的行为!

  • 但是当我复制字符数组中的字符串(字符串大于数组大小)时,我无法捕获任何异常!

  • 在第二种状态下,调试时出现访问冲突错误。 但是为什么不能像第一个状态那样捕获它的异常?

  • 我尝试了另一种解决方案,如以下所述:

    捕获访问冲突异常?

但问题仍然存在。


这是我的代码(我在未分配的char*和字符数组上测试了strcpy()):

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

访问冲突不需要引发异常。

你在这里拥有的是未定义的行为。根据结构的文件

如果目标数组不够大,则未定义该行为。如果字符串重叠,则行为未定义。