由于某些异常,Function()中存在CRASH,因此不会调用throwX。在这种情况下,如何调用catch块来处理异常?注意:我们无法修改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";
那么有人可以帮我吗?
“ CRASH”也不例外。这是未定义的行为。绝对可能发生任何事情。您很幸运,系统检测到它。它可能已经格式化了您的磁盘或从您的鼻子中召唤出了守护程序。取而代之的是,系统仅关闭该过程以防止进一步损坏。
该系统可能甚至会这么好心让你定义做什么,而不是关闭进程。定义它的方式是系统特定的。在Unix中,您需要安装信号处理程序(高级方式),在Windows中,您可以使用结构异常。
但是问题是,如果函数崩溃了,就无法判断出该进程将进程的内存留了多少乱七八糟。您确实必须修复崩溃。崩溃始终是一个错误。
该函数内部发生崩溃的事实并不自动意味着该函数中存在错误。我见过的大多数崩溃都发生在标准库函数中,但它们不是标准库中的错误。它们是由于不正确地使用这些功能,或者有时是由于错误地使用了程序中早先的其他功能引起的。因为当您调用Undefined Behavior时,无法确定何时会导致崩溃。特别是在某些不相关的代码想要使用被覆盖的变量时,缓冲区溢出和写入未初始化的指针最终最终会导致崩溃。
也就是说,如果该错误确实存在于该函数中,并且您无法对其进行修改,则必须找一个可以或找到效果更好的替代方法的人。因为否则程序将无法正常运行。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句