Pie*_*tro 6 c++ exception-handling exception try-catch segmentation-fault
在下面的代码中,在第一次迭代中,我得到一个异常,在第二次迭代中,我得到一个没有打印错误消息的分段错误.似乎没有抓住异常:
int i = 0;
while(i++ < 10)
{
   try {
      cout << "Iteration: " << i << endl;
      // Code...
      cout << "OK" << endl;
   }
   catch(...)
   {
      cerr << "Error message" << endl;
      continue;
   }
}
Output:
Iteration 1
Error message
Iteration 2
Segmentation fault
这是正常的,还是出现了一些真正的错误?
如果它应该是相关的,那么在该代码块中我重置一个MySQL连接,当我检查连接是否关闭时会产生异常.
谢谢.
平台:
 
Linux  -  OpenSuse 11.4 
C++  -  GCC 4.5.1 
Intel Xeon
Mat*_*son 18
由于段错误不是(直接)由软件引起的,而是由处理器检测到您正在尝试访问无效内存(或以无效方式访问内存 - 例如写入写保护的内存,执行内存不是'应该执行,等等,它不是"可捕获的" try/catch,旨在捕获抛出异常的软件.它们都被称为异常,但它们起源于系统的软件/硬件的不同级别.
从技术上讲,您可以使用信号处理程序捕获段错误SIGSEGV.但是,正如Ivaylo所解释的那样,如果你遇到段错误,通常不允许"再试一次".信号处理者SIGSEGV被允许longjmp或者exit,但不应该只返回.
有关信号的更多信息,请访问:http: //www.alexonlinux.com/signal-handling-in-linux
throw可以毫无问题地重试典型的C++异常(结果)(当然,当然可能会再次抛出相同的异常).
| 归档时间: | 
 | 
| 查看次数: | 15799 次 | 
| 最近记录: |