我有这个代码:
std::string ff = "C:\\res\\pp.txt";
std::ifstream test(ff);
if(test.is_open())
{
std::string s;
std::getline(test, s);
}
如果我在构造中放置一个断点并分析测试对象,它被构造但缓冲区是一个不正确的指针。然后,getline 崩溃,因为测试已损坏。
作为辅助信息,这段代码被执行到一个项目中,该项目与一些库链接为 gameplay3d。
一些想法?
编辑:这是堆栈跟踪:
msvcp100d.dll!std::_Xfiopen(const char * filename, int mode, int prot) Línea 85 C++ msvcp100d.dll!std::_Fiopen(const char * filename, int mode, int prot) Línea 94 + 0x11 Bytes C++ sample-browser.exe!std::basic_filebuf >::open(const char * _Filename, int _Mode, int _Prot) Línea 220 + 0x1d Bytes C++ sample-browser.exe!std::basic_ifstream >::basic_ifstream >(const std::basic_string,std::allocator > & _Str, int _Mode, int _Prot) Línea 725 + 0x1f Bytes C++ sample-browser.exe!Audio3DSample::initialize() Línea 30 + 0x15 Bytes C++
在代码命中 _Xfiopen 之前一切似乎都正常。此时,没有创建 fp,虽然创建了 ifstream,但内部 filebuffer 为空。如果我将这段代码放在另一个项目中它就可以工作,更重要的是,构造函数调用的代码和堆栈是完全不同的。
最佳答案
您对问题的描述听起来好像您正在为一个标准 C++ 库使用 header ,但使用来自另一个不兼容实现的实现。在许多情况下,设置应该会导致链接失败,但无法避免在所有情况下都链接不兼容的库。我会验证 header 是否与实际实现相匹配。
关于c++ - ifstream 构造函数返回损坏的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18813113/