这是我的函数:
string GaugeStr;
void someFunction() {
float pie = someFloat();
stringstream ss (stringstream::in | stringstream::out);
ss << pie;
GaugeStr = ss.str();
}当我运行该函数时,它工作正常。然而,当我第二次调用它(someFunction(); someFunction(); )时,我的程序就会崩溃,并出现分段错误。
我尝试将stringstream ss (stringstream::in | stringstream::out);放在函数之外,使其成为一个全局变量,但是我想发送给GaugeStr的内容被附加到了ss中。例如,如果我们假设someFloat()总是返回1.2,那么在我第二次运行该函数时,GaugeStr被设置为1.21.2。
因此,我在函数中插入了ss.str(""),但程序再次崩溃,并显示了一个段错误。
如何将someFloat() is GaugeStr的值设置为不带段错误的字符串?
精确函数
void CPU_BenchmarkFrame::OnButton1Click(wxCommandEvent& event) {
float pie = PiAlgo (Gauge2);
stringstream ss (stringstream::in | stringstream::out);
ss << pie;
wxMessageBox(_("Alert"), _("Sample Alert")); //To test where the segfault happens
string GaugeStr = ss.str();
wstring GaugeWid;
std::copy(GaugeStr.begin(), GaugeStr.end(), GaugeWid.begin());
StaticText2->SetLabel(GaugeWid);
}更多的编辑
问题是这里有一行或多行:
wstring GaugeWid;
std::copy(GaugeStr.begin(), GaugeStr.end(), GaugeWid.begin());
StaticText2->SetLabel(GaugeWid);当我对它们进行注释时,脚本可以正常工作。
发布于 2011-07-05 19:11:35
@Bo发现了一行好东西(问题编辑后...)。我同意。
这里有一个修复它的建议:
GaugeWid.clear();
std::copy(GaugeStr.begin(), GaugeStr.end(), std::back_inserter(GaugeWid));@kongr45gpen:
我怀疑是线程错误:
你使用线程吗?如果你使用线程,你必须适当地锁定GaugeStr或者让它成为一个本地线程。
如果我需要对这些进行扩展,请给我留言,因为目前我不能确定您是否在使用线程。
发布于 2011-07-05 19:13:03
这不管用
std::wstring GaugeWid;
std::copy(GaugeStr.begin(), GaugeStr.end(), GaugeWid.begin());当GaugeWid没有尺寸的时候。而且它也不会转换字符。
如果需要宽字符串,请使用wstringstream。
发布于 2011-07-05 19:01:32
我刚试过了:
#include <iostream>
#include <sstream>
using namespace std;
string GaugeStr;
float someFloat() {
return (float) 3.41;
}
void someFunction() {
float pie = someFloat();
stringstream ss (stringstream::in | stringstream::out);
ss << pie;
GaugeStr = ss.str();
}
int main() {
someFunction();
someFunction();
return 0;
}这是用gcc编译器4.4.0版编译的(运行在Windows上,集成开发环境: CodeBlocks)。
https://stackoverflow.com/questions/6581293
复制相似问题