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;
}