分段错误,因为 ifstream 对象作为参考发送

Segmentation fault because of ifstream obj. sent as reference?

本文关键字:参考 对象 错误 因为 ifstream 分段      更新时间:2023-10-16

首先,我非常抱歉,但我无法提供源代码(无论如何,它是我的母语)。因此,我正在做的是在(全局)函数中声明一个 ifstream 对象,然后将其发送到类的成员函数(将其作为引用获取),然后该函数将其传递给在前面提到的类中使用的类的另一个成员函数(也将其作为引用获取)。我已经查明了用于读取其他类中类中的成员函数中的分段错误(哦,天哪......),我尝试了 eof() 只是为了检查它是否以某种方式搞砸了,它返回 0(如预期)而不会崩溃,只有当我尝试通过 ifstream 对象获取一些数据作为输入时它才会崩溃。

很抱歉递归描述/不提供源代码,如果您想提供帮助并有任何疑问,请询问,我会及时回复。

首先,我非常抱歉,但我无法提供源代码(无论如何,它是我的母语)。因此,我正在做的是在(全局)函数中声明一个 ifstream 对象,然后将其发送到类的成员函数(将其作为引用获取),然后该函数将其传递给在前面提到的类中使用的类的另一个成员函数(也将其作为引用获取)。

所以,像这样:

class Foo {
public:
    // appropriate constructor here
    std::ifstream &stream;
};
Foo f;
void Func() {
    std::ifstream stream("whatever");
    f.stream = stream;
}

是的,这很糟糕。 您的流是全局函数的本地流。一旦函数返回任何引用或指针都是无效的,因为它以自动存储持续时间存储。 如果你想让这个东西保持活力,那么你将需要动态分配它(可能是次优的)或在类本身中构造它。