尝试从istream存储令牌时出现分段错误

时间:2014-04-25 02:48:28

标签: c++ input io fstream

我的代码在从文件中读取时崩溃(在本文末尾看到)。我在main中声明了一个ifstream对象,通过buildGraph函数传递它(它将ifstream&作为参数),并尝试将第一个标记传递给字符串temp。

来自main的相关代码:

#include <fstream>

int main() {

    ifstream infile1("data31.txt");

    if (!infile1) {
        cout << "File could not be opened." << endl;
        return 1;
    }

    GraphM G;
    G.buildGraph(infile1);
}

来自graphm.cpp的相关代码:

#include <fstream>
#include <string>

void GraphM::buildGraph(ifstream& input)
{
    string temp;
    input >> temp;
}

还有一个包含fstream的头文件graphm.h。我和几位在我所在大学工作的导师交谈过,他们根本没有能够提供帮助,因为他们和我一样困惑。函数getline()也会抛出一个分段错误,因此不会起作用。我在做什么错了,在这里?

另外,.txt我读的是:

5
Aurora and 85th
Green Lake Starbucks
Woodland Park Zoo
Troll under bridge
PCC
1 2 50
1 3 20
1 5 30
2 4 10
3 2 20
3 4 40
5 2 20
5 4 25
0 0  0
3
aaa
bbb
ccc
1 2 10
1 3 5
2 3 20
3 2 4
0 0 0

2 个答案:

答案 0 :(得分:0)

(包含注释作为允许代码格式化的答案)

构建SSCCE我将所有代码包含在一个文件中,如下所示:

#include <fstream>
#include <string>
#include <iostream>

using namespace std;

class GraphM {
public:
    void buildGraph(ifstream& input);
};

void GraphM::buildGraph(ifstream& input)
{
    string temp;
    input >> temp;
    cout << temp;
}


int main() {
    ifstream infile1("data31.txt");

    if (!infile1) {
        cout << "File could not be opened." << endl;
        return 1;
    }

    GraphM G;
    G.buildGraph(infile1);
}

然后我编译并运行代码并获得预期的输出5

然后我将代码分成问题中描述的三个文件,编译并运行它们并再次获得相同的结果5。我在Windows 7上的cygwin中使用GNU C ++ 4.7.3。

您能否告诉我们您正在使用的编译器以及系统的其他详细信息?

答案 1 :(得分:0)

    #include <fstream>
#include <iostream>
#include <string>

using namespace std;


void buildGraph(ifstream& input)
{
    string temp;

    for(int i=0; i<sizeof(input); i++)
    {
        input >> temp;
        cout<< temp;
    }
}


   int main()
   {

      ifstream infile1("test.txt");

      if (!infile1) 
      {  
        cout << "File could not be opened." << endl;
        return 1;
      }

      buildGraph(infile1);
   }

我认为将文件转储成字符串可能是你的问题...... 我发布的代码没有给我带来任何问题,但你可能想尝试使用char *来捕获你的文件,然后将其分解为你想要的任何内容。