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

时间:2016-03-18 10:42:14

标签: c++ c++11 memory-management segmentation-fault c++98

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

{
    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。

1 个答案:

答案 0 :(得分:3)

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

在* nix平台上,当一个程序执行未经授权的内存操作时,如读取或写入它不拥有的内存,系统可能会向此进程发送SIGSEGV信号,该信号会将其杀死默认值。

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

在您的情况下,错误可能存在Price[1],如果存在,则typeof(Price[0])::operator=(double)存在问题。但我们不会调试您的代码,除非它是 Minimal, Complete, and Verifiable example