这是我的功能:
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()
的值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);
当我评论它们时,脚本正常工作。
答案 0 :(得分:4)
这不起作用
std::wstring GaugeWid;
std::copy(GaugeStr.begin(), GaugeStr.end(), GaugeWid.begin());
当GaugeWid
没有大小时并且它也不会转换字符。
如果您想要一个宽字符串,请使用wstringstream
。
答案 1 :(得分:2)
我刚尝试过:
#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-compiler版本4.4.0(在Windows上运行,IDE:CodeBlocks)进行编译。
答案 2 :(得分:2)
@Bo发现一条好线(问题被编辑后......)。我同意。
以下是修复它的建议:
GaugeWid.clear();
std::copy(GaugeStr.begin(), GaugeStr.end(), std::back_inserter(GaugeWid));
@ kongr45gpen:
我怀疑是一个线程错误:
听起来像是线程错误。你是否使用线程,如果是这样,你必须适当地锁定GaugeStr或使其成为本地线程。
如果我需要扩展这些内容,请给我留言,因为目前我无法确定您是否使用了线程。