【问题标题】:ifstream* Segmentation fault [closed]ifstream *分段错误[关闭]
【发布时间】:2017-02-22 06:23:46
【问题描述】:

我想在我的代码中使用类型 ifstream* 打开文件

ifstream* i;
(*i).open("test.txt");

它会引发分段错误,我不知道为什么。 请帮我解决问题(使用ifstream* 打开文件)并告诉我为什么会出错。

【问题讨论】:

  • 你有一个指针,但它指向在哪里?
  • 另外,在现代 C++ 中,根本不需要使用指针
  • 编译时包含所有警告和调试信息 (g++ -Wall -g)。然后使用调试器
  • 我投票决定将此问题作为题外话结束,因为您不能期望输入一些随机字符并将其编译为 C++。这是货物崇拜节目。

标签: c++ pointers


【解决方案1】:

在您的代码中,i 是一个指针,它没有被初始化,所以它指向的内存位置是不确定的。

接下来,您尝试在 (*i)..... 中取消引用它,这会调用 undefined behavior

在取消引用指针之前,您需要分配内存(即,使指针指向某个有效的内存位置)。

【讨论】:

    【解决方案2】:
    ifstream* i;
    

    i 是一个指针,但它不指向任何ifstream 对象。因此出现分段错误。

    【讨论】:

      【解决方案3】:

      这样使用:

      ifstream i;
      i.open("test.txt");
      

      否则它会失败,因为你的指针不指向任何地方,而不是一个有效的对象。

      或者如果你仍然喜欢使用指针:

      ifstream* i = new ifstream;
      i->open("test.txt");
      ...
      delete i;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-03-12
        • 2014-07-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-10-30
        • 2013-06-08
        相关资源
        最近更新 更多