C++ 如何捕获C+中的运行时错误+;
指C++ 如何捕获C+中的运行时错误+;,c++,C++,指 试试看{ int i=0; int j=0/i;/*除以0*/ int*k=0; std::cout如果取消引用不指向对象的指针,则不会出现异常,会出现未定义的行为。任何情况都可能发生 通常,如果您取消引用空指针,就像您在示例中所做的那样,程序将崩溃。当您运行此程序时(至少在我的系统上运行时)你不是在抛出C++异常;实际上是在对标准C库进行分段。在库中的一个分割错误不是C++异常,所以C++运行时没有任何东西可以捕获。 对比这个程序,例如,在C或java中的等效程序,不同的是它们各自的运行时
试试看{
int i=0;
int j=0/i;/*除以0*/
int*k=0;
std::cout如果取消引用不指向对象的指针,则不会出现异常,会出现未定义的行为。任何情况都可能发生
通常,如果您取消引用空指针,就像您在示例中所做的那样,程序将崩溃。当您运行此程序时(至少在我的系统上运行时)你不是在抛出C++异常;实际上是在对标准C库进行分段。在库中的一个分割错误不是C++异常,所以C++运行时没有任何东西可以捕获。
对比这个程序,例如,在C或java中的等效程序,不同的是它们各自的运行时将处理这些错误运行时异常,并且不会分割任何外部库。
< P>:EHa是神奇的编译器开关,使VisualStudio将SEH异常当作C++异常来处理。然后您可以“捕获”。访问冲突和被零除异常
<>这通常是不建议的。 运行环境C++给你的是非常薄的。在大多数情况下,它会做你所计划的事情,不会做你不打算做的事情。你可以为指针写一个包装器,当你去引用一个空指针时,它会做检查。实际上,Booo::SyrdYPPTR < /Cord>当你去引用它时,OT等于null,所以在调试时你得到了额外的信息,同时得到了与本地指针类似的性能。 这不是C++异常。这些都是OS异常。如果你使用Windows,你可以启用异步异常模型(/EHA标志)。并捕获Win32异常。谢谢。看起来我把Java的异常系统和C++的异常混合在一起了。酷!我从来都不知道/EHa选项。好东西,我不知道这一点。实际上,当他们对外部库进行故障隔离时(这是非常罕见的),程序会终止。。。
try {
int i = 0;
int j = 0/i; /* Division by 0 */
int *k = 0;
std::cout << *k << std::endl; /* De-reference invalid memory location. */
}
catch (...) {
std::cout << "Opps!" << std::endl;
}