Intereting Posts

Сбой программы после открытия файла

Мне нужно прочитать значения из файла в моей программе. Файл успешно открывается, но затем он немедленно сработает. Что-то не так с моим кодом?

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

Предполагая, что intList не является NULL , вы будете называть lastInt->nextNode = anotherInt; во время вашей первой итерации цикла, в то время как lastInt по-прежнему NULL приводит к сбою программы (из-за этого, следуя за нулевым указателем).

Предполагая, что файл intInput.txt правильно отформатирован, ваш intInputFile >> fileInt; строка должна читать первое целое из него просто отлично, поэтому должна быть какая-то проблема с ifstream . Функция is_open члена ifstream сообщает только, имеет ли stream связанный с ним файл. Это не обязательно говорит вам, если возникла проблема с открытием файла. Вы можете проверить это с помощью good функции. Например:

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

В зависимости от вашей системы вы можете узнать причину любой ошибки с помощью strerror(errno) следующим образом:

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

Это работает для меня, но см. Этот вопрос для получения дополнительной информации, поскольку он может работать не везде.