在ostringstream对象上执行.str()。c_str()操作,给出核心转储

时间:2012-05-11 11:55:07

标签: c++ stringstream

我的代码如下

std::ostringstream tmpstr, tmpstr2;
for( /* something */ )
{
    //writting inside tmpstr
}

tmpstr2 << tmpstr.rdbuf();
cout << "assigned to tmpstr2"; 
out <<tmpstr2.str().c_str() ; // Where out is ostrstream& out

这是转储中的最后一次堆栈调用: -

std::basic_ostringstream<char,std::char_traits<char>,std::allocator<char> >::~basic_ostringstream

执行时的最后一行给了我一个核心转储。我无法理解它背后的原因。如果我正在执行invalid但不是编译错误的操作,有人可以告诉我。

1 个答案:

答案 0 :(得分:2)

你用另一个陈述破坏了你的记忆。在没有看到实际代码的情况下很难猜测,但最好的猜测是你在tmpstr或之后直接写出一些分配的东西。

无论哪种方式,实际上属于流对象的内存都会被覆盖,从而导致流对象中断。核心转储发生在实际的断线之后,因为没有检测到。你写了一些界限,但最终在你的程序的记忆中,而不是在外面。特别是在tmpstr的记忆中。