【发布时间】:2011-07-05 10:34:13
【问题描述】:
这是我的功能:
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);
当我评论它们时,脚本运行正常。
【问题讨论】:
-
你能用
main()发布一段导致段错误的完整代码吗? -
这看起来不错。您没有显示的代码有问题。
-
段错误的确切来源是什么?堆栈跟踪会很好......
-
与问题无关,但您的构造函数参数是多余的 - 将其关闭(
in | out已经是默认值)。 -
@kongr 没有调试符号和上下文的堆栈跟踪完全是零使用。所有这些都告诉我们错误是……somewhere(更准确地说,在标记为
??的位置)。请提供一个说明问题的最小工作示例。
标签: c++ string segmentation-fault