我的代码如下
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
但不是编译错误的操作,有人可以告诉我。
答案 0 :(得分:2)
你用另一个陈述破坏了你的记忆。在没有看到实际代码的情况下很难猜测,但最好的猜测是你在tmpstr或之后直接写出一些分配的东西。
无论哪种方式,实际上属于流对象的内存都会被覆盖,从而导致流对象中断。核心转储发生在实际的断线之后,因为没有检测到。你写了一些界限,但最终在你的程序的记忆中,而不是在外面。特别是在tmpstr的记忆中。