gpt4 book ai didi

c++ - 我收到段错误而不是异常

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:02:45 25 4
gpt4 key购买 nike

在下面的代码中,在第一次迭代中我得到了一个异常,在第二次迭代中我得到了一个没有打印错误消息的段错误。似乎没有捕获异常:

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++ - 海湾合作委员会 4.5.1
英特尔至强

最佳答案

由于段错误不是(直接)由软件引起的,而是由处理器检测到您正在尝试访问无效内存(或以无效方式访问内存 - 例如写入写保护的内存,执行内存不应该被执行等),它不能用 try/catch“捕获”,它被设计用来捕获抛出异常的软件。它们都被称为异常,但它们起源于系统软件/硬件的不同级别。

从技术上讲,您可以使用 SIGSEGV 的信号处理程序捕获段错误。然而,正如 Ivaylo 解释的那样,如果遇到段错误,通常不允许“重试”。 SIGSEGV 的信号处理程序允许longjmpexit,但不应该只是返回。

在此处阅读有关信号的更多信息: http://www.alexonlinux.com/signal-handling-in-linux

典型的 C++ 异常(throw 的结果)可以毫无问题地重试(当然,同样的异常可能会再次抛出,当然。

关于c++ - 我收到段错误而不是异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14899749/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com