2016-03-18 71 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

相關問題