【问题标题】:Segmentation fault because of ifstream obj. sent as reference? [closed]由于 ifstream obj 导致的分段错误。作为参考发送? [关闭]
【发布时间】:2012-06-26 22:50:00
【问题描述】:

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

抱歉递归描述/没有提供源代码,如果你想帮助和有任何问题,请提出,我会及时回复。

【问题讨论】:

  • 是的,我忘了说,对不起,我有这样的(在“父”类的成员函数中):ifstream_obj>>integer>>string; call_to_member_function_of_child_class(same_ifstream_obj);

标签: c++ crash segmentation-fault ifstream


【解决方案1】:

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

所以,是这样的:

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

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

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

【讨论】:

  • 看起来类似这样:pastebin.com/szeQ4s5E(实际上就是这样)
  • @Patrunjel:我没有看到该代码有问题,运行它时也没有引发任何异常。我认为我们需要一个实际的代码示例和示例输入来重现问题。
  • 这是输入:pastebin.com/niyb3aPq(代码使用了两个输入文件,但我只是使用了两次,出于测试目的,它甚至没有读取第二个文件,反正)。这是源代码pastebin.com/Zg6eiVxR。令人讨厌的事情发生在第 15 行。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-12-09
  • 2018-01-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-10
  • 2020-12-01
相关资源
最近更新 更多