ofstream operator<<访问冲突错误

时间:2013-12-04 11:35:59

标签: c++ windows access-violation ofstream visual-studio-2010

我有一个为Linux编写的小应用程序,现在已移植到Windows。它是单线程的并且使用boost(如果重要的话) 应用程序正在尝试使用以下代码写入文本文件:

m_oFile.open(oFileName.c_str());
if(!m_oFile.is_open())
{
    cerr << "Unable to open output file: " <<  oFileName.c_str() << endl;
    exit(0);
}

m_oFile << "some text goes here\n";

m_oFile是该班级的成员 该文件已成功创建和打开;在上面的最后一个代码行抛出异常。

堆栈追踪:

msvcr100.dll!_lock_file(_iobuf * pf)  Line 236 + 0xa bytes  C   
App.exe!std::basic_filebuf<char,std::char_traits<char> >::_Lock() Line 310 + 0xf bytes  C++   
App.exe!std::basic_ostream<char,std::char_traits<char> >::_Sentry_base::_Sentry_base(std::basic_ostream<char,std::char_traits<char> > & _Ostr)  Line 93 + 0x30 bytes    C++
App.exe!std::basic_ostream<char,std::char_traits<char> >::sentry::sentry(std::basic_ostream<char,std::char_traits<char> > & _Ostr)  Line 114 +  x3a bytes   C++

谢谢!

编辑:

当我将代码生成属性更改为使用多线程调试DLL(/ MDd)而不是多线程Dll(/ MD)时,一切都正常运行。你有什么解释吗?
再次感谢。

2 个答案:

答案 0 :(得分:1)

哦 - 图书馆梦魇的msvc不兼容 - 是的,确保所有(!)库彼此匹配。

  • no mixing debug an release
  • 不混合单线程和多线程
  • ...

答案 1 :(得分:0)

看看here并尝试以读/写模式打开文件。

m_oFile.open(oFileName.c_str(), ios::out | ios::in);

否则,请检查文件的权限。

修改

请务必在最后关闭文件。

m_oFile.close();

另一个打击:可以从另一个线程使用该文件吗?