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 に答える