次のコードをC++Builder XEで実行すると、CodeGuardがエラーを検出する。
#include <fstream>
#include <string>
const UnicodeString filename = L"C:\\file.txt";
std::ifstream ifs(filename.c_str());
std::string buf;
while(ifs && getline(ifs, buf)) //ここでエラー
{
}
エラーメッセージは次の通り。
Bad parameter 処理中: Project1.exe(1368) - c:\program files\embarcadero\rad studio\8.0\include\../include/dinkumware/fstream#24
A bad file or pipe stream (0x32BC08C0) has been passed to the function.
0x00409B68 呼び出し先: fgetc(0x32BC08C0)
0x00408DD6 - c:\program files\embarcadero\rad studio\8.0\include\../include/dinkumware/fstream#24
0x00407A09 - c:\program files\embarcadero\rad studio\8.0\include\../include/dinkumware/fstream#343
0x004078D5 - c:\program files\embarcadero\rad studio\8.0\include\../include/dinkumware/fstream#323
以前にも似たような現象に遭遇した覚えがあるので、ブログの記事を検索すると見つかった。
同じ問題かな。
追記
エラーが発生するのは、プロジェクトオプションで「CodeGuardを有効にする」がtrueで、「動的RTLとリンク」がtrueのときです。
http://qc.embarcadero.com/wc/qcmain.aspx?d=46102
http://qc.embarcadero.com/wc/qcmain.aspx?d=62285
と同じ問題でしょうか?
高橋様
コメントありがとうございます。
QCのと同じ問題だと思います。