打开文件后程序崩溃

时间:2012-12-19 00:56:44

标签: c++ ifstream

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

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;

2 个答案:

答案 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以获取更多信息,因为它可能无处不在。