输出字符串后,例如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。
答案 0 :(得分:3)
分段错误是未定义行为的可能后果。
在* nix平台上,当一个程序执行未经授权的内存操作时,如读取或写入它不拥有的内存,系统可能会向此进程发送SIGSEGV
信号,该信号会将其杀死默认值。
在大多数情况下,分段错误是内存管理不良的结果,例如解除引用null或悬空指针,读取/写入数组,等。
在您的情况下,错误可能存在Price[1]
,如果存在,则typeof(Price[0])::operator=(double)
存在问题。但我们不会调试您的代码,除非它是 Minimal, Complete, and Verifiable example。