【问题标题】:Does catch(...) actually catch all exceptions?catch(...) 实际上捕获所有异常吗?
【发布时间】:2011-11-21 06:07:05
【问题描述】:

我看到 catch (...) 没有捕获所有异常,并且最终用户会抛出一个恼人的弹出窗口。

size_t pos;
char *ptrDir="c:\\test";
std::string strDir = 
strDir.erase(strlen(ptrDir) - 1);
pos = strDir.find("Test");
try
{
    std::string strPat = strDir.substr(pos);
}
catch(...)
{
    std::cout<<"I am hiding Exception";
}

我使用的是 Visual Studio 2005,Windows XP。

注意:代码是有意生成异常的。这是一个测试代码

【问题讨论】:

  • 您一定是在谈论诸如访问冲突之类的异常,它们不是标准 C++ 异常——它们是结构化异常处理的一部分:gamedev.net/page/resources/_/technical/general-programming/…
  • 也许这与SEH exceptions有关?可能你也需要抓住它们。
  • 注意:结构化异常不是 C++ 异常(因此不是语言的一部分)。它们是操作系统的一部分,而不是语言的一部分,尽管 DevStudio 提供了额外的语言扩展来捕获和操作它们。

标签: c++ windows visual-studio stl


【解决方案1】:

您的代码可能会产生访问冲突,这在 VC++ 中不会是标准异常,它们属于结构化异常的领域,您也可以捕获这些异常,但需要使用不同的机制:

【讨论】:

    猜你喜欢
    • 2023-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-21
    • 2011-05-27
    • 2012-06-04
    相关资源
    最近更新 更多