我需要将文件中的值读入我的程序。该文件已成功打开,但随后它立即崩溃。我的代码有问题吗?
void createList(intNode*& intList)
{
intNode* lastInt; //points to last integer in file
lastInt = NULL;
int fileInt; //int read from input file
ifstream intInputFile;
intInputFile.open("intInput.txt");
if (intInputFile.is_open())
{
cout << "intInput.txt open successful" << endl;
}
else
{
cout << "intInput.txt open unsuccessful" << endl;
}
intInputFile >> fileInt;
while(!intInputFile.eof())
{
intNode* anotherInt;
anotherInt = new intNode;
if(intList==NULL)
{
intList = anotherInt;
lastInt = anotherInt;
}
else
{
lastInt->nextNode = anotherInt;
}
lastInt = lastInt->nextNode;
lastInt->intValue = fileInt;
lastInt->nextNode = NULL;
intInputFile >> fileInt;
}
intInputFile.close();
cout << "List created from input file" << endl;
}
感谢。
编辑:
检查完毕后,我有一个问题
else
{
lastInt->nextNode = anotherInt;
}
所以这段代码一定有问题:
lastInt = lastInt->nextNode;
lastInt->intValue = fileInt;
lastInt->nextNode = NULL;
intInputFile >> fileInt;
因为我之后直接有一个cout声明而且它没有用。
在进一步研究之后,问题在于这一行:
intInputFile >> fileInt;
答案 0 :(得分:3)
假设intList
不是NULL
,那么您将在循环的第一次迭代期间调用lastInt->nextNode = anotherInt;
,而lastInt
仍为NULL
导致程序崩溃(由于它跟在空指针之后)。
答案 1 :(得分:1)
假设intInput.txt
文件格式正确,您的intInputFile >> fileInt;
行应该从中读取第一个整数,因此ifstream
一定存在问题。 is_open
的{{1}}成员函数仅告诉您该流是否具有与之关联的文件。它不一定会告诉您打开文件是否有问题。您可以使用ifstream
功能检查。 E.g:
good
根据您的系统,您可以使用if (intInputFile.good())
cout << "intInputFile is good" << endl;
else
cout << "intInputFile is not good" << endl;
找出任何错误的原因,如下所示:
strerror(errno)
这适用于我,但请参阅this question以获取更多信息,因为它可能无处不在。