12/01/21 08:36:21.02
VS2008 VC++
std::ostringstreamの変数に対して文字追加して結合していく関数を作り、
直後にchar*型で取得した文字列をfwriteでファイルに出力をするというコンソールアプリを作っています。
for( 約10万回 ){
std::ostringstream str;
func( &str ){ // 関数 ↓関数の中身
for( 約100回 )
*pStr << "文字列,";
}
fwrite( str..str().c_str()を出力 );
str.str(""); // 念のため
str.clear(); // 念のため
}
ざっくり書くとこんな感じなのですが、
func関数の中の文字列を*pStrに入れるところで例外エラーで止まる場合があります。
例えば大本が3万回目のループで、関数内は50回目のループのところ・・・など。
1度止まるとそのままであれば何度実行しても同じ場所で止まりますが、
ソースに変化を持たせると止まる位置が変わったり、
func関数内でprintfを使って文字列を表示させるなどの処理を入れると問題なく通ったりします。
std::stringに置き換えても似たような事象がおき原因が特定できなかったのですが、
string系に対して文字列を追加していくのとfwriteは何か競合していたりするのでしょうか。
文字列の追加の途中なのでメモリが確保できなかった・・・と思うのですが、
タスクマネージャーで見る限りはメモリの使用量は増加していません。