首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用stringstream的Segfault

使用stringstream的Segfault
EN

Stack Overflow用户
提问于 2011-07-05 18:34:13
回答 3查看 4.7K关注 0票数 3

这是我的函数:

代码语言:javascript
复制
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的值设置为不带段错误的字符串?

精确函数

代码语言:javascript
复制
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);
}

更多的编辑

问题是这里有一行或多行:

代码语言:javascript
复制
    wstring GaugeWid;
    std::copy(GaugeStr.begin(), GaugeStr.end(), GaugeWid.begin());

    StaticText2->SetLabel(GaugeWid);

当我对它们进行注释时,脚本可以正常工作。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-07-05 19:11:35

@Bo发现了一行好东西(问题编辑后...)。我同意。

这里有一个修复它的建议:

代码语言:javascript
复制
GaugeWid.clear();
std::copy(GaugeStr.begin(), GaugeStr.end(), std::back_inserter(GaugeWid));

@kongr45gpen:

我怀疑是线程错误:

  • 你正在更新一个变量名GaugeStr (听起来像是meter的代码在无伤大雅的赋值到.一个全球性的。

你使用线程吗?如果你使用线程,你必须适当地锁定GaugeStr或者让它成为一个本地线程。

如果我需要对这些进行扩展,请给我留言,因为目前我不能确定您是否在使用线程。

票数 3
EN

Stack Overflow用户

发布于 2011-07-05 19:13:03

这不管用

代码语言:javascript
复制
std::wstring GaugeWid;
std::copy(GaugeStr.begin(), GaugeStr.end(), GaugeWid.begin());

GaugeWid没有尺寸的时候。而且它也不会转换字符。

如果需要宽字符串,请使用wstringstream

票数 5
EN

Stack Overflow用户

发布于 2011-07-05 19:01:32

我刚试过了:

代码语言:javascript
复制
#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)。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6581293

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档