什么是分段错误?以及我该如何解决它

What is a segmentation fault? And how can I fix it?

本文关键字:何解决 解决 分段 错误 什么      更新时间:2023-10-16

输出字符串(例如 20.58)后,我尝试使用 boost::lexical_cast 将其转换为双精度数。但是下一行代码没有运行,我的程序结束了,我得到了一个分段错误。

{
    string temp = matches[1];
    int size = temp.find_first_of("<"); //number of chars until "<"
    temp.resize(size);
    cout << "Match: " << temp << "n";
    Price[1] = boost::lexical_cast<double>(temp);
    cout << "Price: $" << Price[1] << 'n';
    //break;
}

输出:

Match: 20.96
RUN FINISHED; Segmentation fault; real time: 860ms; user: 0ms; system: 0ms

我更喜欢使用 std:stod;但我在 Mac OSX 10.6.8 上使用 netbeans,并且发现不支持 C++11。

分段错误是未定义行为的可能后果。

在 *nix 平台上,当程序执行未经授权的内存操作(例如读取或写入它不拥有的内存)时,系统可能会向此进程发送SIGSEGV信号,默认情况下会终止它。

在大多数情况下,分段错误是内存管理不良的结果,例如取消引用空值或悬空指针、在数组外部读取/写入

在您的情况下,故障可能在于Price[1]的存在,或者如果存在,则typeof(Price[0])::operator=(double)的问题。但是,我们不会调试你的代码,除非它是最小、完整和可验证的示例。