由于ifstream obj导致的分段错误。作为参考发送?

时间:2012-06-26 22:50:00

标签: c++ crash segmentation-fault ifstream

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

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

1 个答案:

答案 0 :(得分:2)

  

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

所以,像这样:

class Foo {
public:
    // appropriate constructor here
    std::ifstream &stream;
};

Foo f;
void Func() {
    std::ifstream stream("whatever");
    f.stream = stream;
}

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