gpt4 book ai didi

c++ - 如何在不抛出的情况下捕获异常

转载 作者:行者123 更新时间:2023-11-28 00:31:55 26 4
gpt4 key购买 nike

由于某些异常,Function() 中存在 CRASH,因此不会调用 throw X。这种情况下如何调用catch block 来处理异常呢?注意:我们不能修改Function()定义中的代码

示例代码:

 cout << "Before try \n";
try {
abc->Function(); //Here is CRASH

throw x;
cout << "After throw (Never executed) \n";

}
catch (...) {
cout << "Exception Caught \n";
}

cout << "After catch (Will be executed) \n";

那么有人可以帮我解决这个问题吗?

最佳答案

“崩溃”也不异常(exception)。是Undefined Behaviour .绝对任何事情都可能发生。你很幸运,系统检测到了它。它可能已经格式化了您的磁盘或从您的 Nose 里召唤了守护进程。相反,系统只是关闭进程以防止进一步损坏。

系统可能甚至会让您定义要做什么而不是关闭进程。定义它的方式是系统特定的。在 Unix 中,您需要 install signal handler (advanced way),在 Windows 中你使用 structural exceptions .

但问题是,如果函数崩溃了,就没有办法判断它给进程的内存留下了多大的困惑。你真的必须修复崩溃。崩溃总是一个错误。

崩溃发生在该函数内部这一事实并不自动意味着错误就在该函数中。我见过的大多数崩溃都发生在标准库函数中,但它们不是标准库中的错误。它们是由于这些函数的不正确使用造成的,或者有时在程序的早期不正确地使用了不同的东西。因为当你调用 Undefined Behaviour , 没有告诉 什么时候 它会导致崩溃。特别是缓冲区溢出和写入未初始化的指针往往会导致崩溃最终当一些不相关的代码想要使用被覆盖的变量时。

也就是说,如果错误确实存在于该函数中并且您无法对其进行修改,那么您将不得不找到可以或找到更好的替代方法的人。因为否则程序将无法正常工作。

关于c++ - 如何在不抛出的情况下捕获异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22524078/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com