4

我需要将文件中的值读入我的程序。该文件已成功打开,但随后立即崩溃。我的代码有问题吗?

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;
4

2 回答 2

3

假设intListis not NULL,那么您将lastInt->nextNode = anotherInt;在循环的第一次迭代期间调用 whilelastInt仍然NULL导致程序崩溃(由于它遵循空指针)。

于 2012-12-19T01:13:26.917 回答
1

假设intInput.txt文件格式正确,您的intInputFile >> fileInt;行应该从中读取第一个整数就好了,所以ifstream. 的is_open成员函数ifstream只告诉您流是否有与之关联的文件。它不一定会告诉您打开文件是否有问题。您可以使用该good功能进行检查。例如:

if (intInputFile.good()) 
    cout << "intInputFile is good" << endl;
else 
    cout << "intInputFile is not good" << endl;

根据您的系统,您可以使用以下方法找strerror(errno)出任​​何错误的原因:

#include <cstring>
#include <cerrno>

...

if (!intInputFile.good())
    cout << strerror(errno) << endl;

这对我有用,但请参阅此问题以获取更多信息,因为它可能不适用于所有地方。

于 2012-12-19T02:31:15.290 回答