我不明白为什么我使用ifstream时出现分段错误

问题描述:

我对C++相当陌生。我试图打开一个文件并将其传递给另一个方法,以便我可以从ifstream读取数据。这是打开文件的方法。我不明白为什么我使用ifstream时出现分段错误

int main() { 
// part 1 
    ifstream infile1("data31.txt"); 
    if (!infile1) { 
     cout << "File could not be opened." << endl; 
     return 1; 
    } 

//for each graph, find the shortest path from every node to all other nodes 
    for (;;) { 
     int data = 0; 
     GraphM G; 
     G.buildGraph(infile1); 
     if (infile1.eof()) 
      break; 

    } 

    return 0; 
}' 

然后,我有另一种方法,是在一个名为GraphM另一个类,我已经实现了这种方式:

void GraphM::buildGraph(ifstream& infile1) { 
    int data = 0; 
    infile1 >> data; 
    cout << "data = " << data << endl; 
} 

但是当我尝试读取数字存储到一个数据变量,我出现分段错误。任何人都可以帮我弄清楚什么是错的?

在此先感谢。

+0

考虑(1)'outputing错误消息时,使用'的std :: cerr'和'退出。 – PhotometricStereo

我无法解释分段故障,但使用infile.eof()来打破并不是一个好策略。进一步的细节见Why is iostream::eof inside a loop condition considered wrong?

我建议使用:

int main() { 

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

    // Continue reading as long as the stream is valid. 
    for (; infile1 ;) { 
     GraphM G; 
     G.buildGraph(infile1); 
    } 

    return 0; 
} 

void GraphM::buildGraph(ifstream& infile1) { 
    int data = 0; 
    if (infile1 >> data) 
    { 
     // Data extraction was successful. 
     cout << "data = " << data << endl; 
    } 
}