C ++异常处理导致终止

时间:2011-10-24 06:10:45

标签: c++

我们在c ++代码中遇到问题。当抛出异常时    进程终止,但我的代码有正确的异常    处理

   Core stack is below.
   ======================
   #0  0xffffe410 in __kernel_vsyscall ()
   #1  0x00489915 in raise () from /lib/tls/libc.so.6
   #2  0x0048b379 in abort () from /lib/tls/libc.so.6
   #3  0xf6a1fbdb in __gnu_cxx::__verbose_terminate_handler () from /usr/lib/libstdc++.so.6
   #4  0xf6a1d8f1 in __cxa_call_unexpected () from /usr/lib/libstdc++.so.6
   #5  0xf6a1d926 in std::terminate () from /usr/lib/libstdc++.so.6
   #6  0xf6a1da6f in __cxa_throw () from /usr/lib/libstdc++.so.6

一些论坛显示在处理其他异常时出现堆栈展开或异常时可能会发生这种情况。

您能否在此建议解决问题。

3 个答案:

答案 0 :(得分:10)

在以下情况下可以调用终止:

  • 在传播另一个异常
  • 时抛出异常
  • 抛出违反异常规范的异常
  • 抛出异常但从未被捕获

但您的调用堆栈还有unexpected => __cxa_call_unexpected ()

对我而言,这表明违反了例外规范 这会调用unexpected(),默认情况下会调用terminate()。

答案 1 :(得分:3)

您是否在任何对象析构函数中抛出异常?终止调用通常发生在* nix系统中,当在捕获当前异常之前抛出新异常时。

当抛出异常时,堆栈框架中的对象会在堆栈展开时被破坏。如果这些对象中的任何一个在销毁期间抛出异常,它会混淆异常处理机制,因为它现在有两个异常捕获,原始异常和在堆栈中销毁对象期间抛出的新异常。所以它发出终止和中止。

答案 2 :(得分:0)

如果/ when无法为将被抛出的依赖异常对象分配内存,也可能导致。 (我想这很罕见。但可能是应用程序异常终止的原因。)