/ /コアダンプを提供するostringstreamオブジェクトで.str()。c_str()操作を実行する-C ++、stringstream

コアダンプを生成するostringstreamオブジェクトに対して.str()。c_str()操作を実行する - 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は1

別のメモリでメモリが破損していますステートメント。実際のコードを見ずに推測することは困難ですが、最良の推測は、tmpstrまたはスタック配列の直前に割り当てられた何かの範囲外に書き込むことです。

どちらにしても、実際に属するメモリストリームオブジェクトが上書きされ、ストリームオブジェクトが破損します。コアダンプは、検出されなかったため、実際の破線の後に発生します。いくつかの境界を上書きしましたが、外部ではなくプログラムのメモリで終了しました。特に、tmpstrのメモリ内。