c++ - ifstream 构造函数返回损坏的对象

标签 c++

我有这个代码:

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/

相关文章:

c++ - 将投影转换为正交光线转换

C++ - 如何将 char append 到 char*?

c++ - 如何使用静态对象和方法!? C++ 挫败感

c++ - 哪些 boost 库正在走向 TR2?

C++ 传递对象的速度有多快?

c++ - 指针变量,var 和 &var 的区别

C++ 模板<运算符>

c# - 将字节数组的 C++ 结构转换为 C#

c++ - 如果 x 和 y 分别是值为 1 和 2 的两个整数。语句 y= - -x-- 是什么意思?

c++ - 可变大小的对象可能无法初始化 C++