我不明白为什么我使用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;
}
但是当我尝试读取数字存储到一个数据变量,我出现分段错误。任何人都可以帮我弄清楚什么是错的?
在此先感谢。
答
我无法解释分段故障,但使用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;
}
}
考虑(1)'outputing错误消息时,使用'的std :: cerr'和'退出。 – PhotometricStereo