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

问题描述 投票:2回答:1

这个问题在这里已有答案:

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

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

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

  • 当我在未分配的char*char *c;)中复制一个字符串时,我可以在catch (...)部分捕获它的异常。 (但我知道这是一个未定义的行为!)
  • 但是当我在一个字符数组中复制一个字符串(字符串大于数组大小)时,我无法捕获任何异常!!
  • 在第二个状态,在调试时我收到了访问冲突错误。但为什么不能像第一州一样抓住它的例外?
  • 我尝试了另外提到的解决方案: 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;
}
c++ error-handling try-catch strcpy
1个回答
0
投票

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

你在这里有什么未定义的行为。根据strcpy的文件

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

© www.soinside.com 2019 - 2024. All rights reserved.