2016-03-18 72 views
1

在输出字符串例如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。

+8

什么是价格[1]'?你确定索引1在那里有效吗? –

+2

请发表[mcve] – YSC

回答

3

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

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

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

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

相关问题