c++ - 字符串流的段错误

标签 c++ string segmentation-fault

这是我的功能:

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);

当我评论它们时,脚本正常工作。

最佳答案

这行不通

std::wstring GaugeWid;
std::copy(GaugeStr.begin(), GaugeStr.end(), GaugeWid.begin());

GaugeWid 没有大小时。而且它也不转换字符。

如果你想要一个宽字符串,使用一个wstringstream

关于c++ - 字符串流的段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6581293/

相关文章:

c++ - MongoDB c++ 遗留驱动程序 1.1.2 不工作 - 使用 VS2013、Win 10、boost-1_62 编译

c++ - C++ 中有什么支持序列化的映射?

php - PHP 中的 URL 友好用户名?

C++ string.replace 生成 "No matching function for call"错误

C++ vector<string> 段错误

android - 从 QT/C++ 项目访问 Android Calendar Provider

mysql - 在 MySQL Workbench 中搜索多个字符串

c - 为什么这段 C 代码会在 macOS 上生成段错误,而在其他系统上不会?

c - 为什么节点没有正确添加以及为什么它打印相反? (单链表)

c++ - 在带有 Rcpp 的 R 包中使用头文件 (.h) 和 cpp 文件