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

时间:2019-03-26 07:13:16

标签: c++ error-handling try-catch strcpy

在下面的代码中,我想根据Microsoft Page关于异常处理模型 catch(...)捕获异步和同步异常>。

我还将“异常处理模型”设置为最高Yes with SEH Exceptions (/EHa)

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

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

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

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

  • 我尝试了另一种解决方案,如:

    Catching access violation exceptions?

但是问题仍然存在。


这是我的代码(我在未分配的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;
}

1 个答案:

答案 0 :(得分:0)

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

这里有未定义的行为。根据{{​​3}}

的文档
  

如果dest数组不够大,则行为不确定。如果字符串重叠,则行为不确定。