C++ 在给出核心转储的ostringstream对象上执行.str().c_str()操作
我的代码如下C++ 在给出核心转储的ostringstream对象上执行.str().c_str()操作,c++,stringstream,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::o
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::ostringstream tmpstr,tmpstr2;
对于(/*某物*/)
{
//在tmpstr中写入
}
tmpstr2另一条语句损坏了内存。在没有看到实际代码的情况下很难猜测,但最好的猜测是,您在tmpstr之前或之后直接写入了超出分配范围的内容或堆栈数组
无论哪种方式,实际上应该属于流对象的内存都会被覆盖,从而导致流对象中断。堆芯转储发生在实际断线之后,因为未检测到它。您写了一些边界,但最终在程序内存中,而不是外部。特别是在tmpstr的内存中。问题可能出在您没有显示的代码中。.c_str()
在任何情况下都不是必需的。为其他人创建一个最小的可编译测试用例来体验相同的行为应该不难……您需要发布一个简短的、自包含的、正确的(可编译的),示例-在tmpstr.str().c_str()
合法之后,可以在tmpstr上执行rdbuf
操作吗?是的,合法。我假设在一些与“tmpstr”无关的代码中一定存在EOR错误