1

我的代码如下

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不是编译错误的操作。

4

1 回答 1

2

你用另一个陈述破坏了你的记忆。没有看到实际代码很难猜测,但最好的猜测是你写的东西超出了 tmpstr 之前分配的范围或之后直接的堆栈数组。

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

于 2012-05-11T12:07:58.237 回答