Ошибка при повторном обращении к файлу в цикле на второй итерации

char line[30];


void write_dict() {
  ifstream file("Словарь.txt");
  ofstream file_out("Результат.txt");

  //some code

  file.close();
  file_out.close();
 }


void add_words(char search_letter) {
   ifstream file("Словарь.txt");
   ofstream file_out("Результат.txt", ios_base::app);  //Дописать информацию в конец файла

   //some code

   file.close();
   file_out.close();
   }

void output(char *name_of_file) {
   ifstream file(name_of_file);
   while (!file.eof()) {
      file.getline(line, 30);
      int index(0);
      while (line[index] != '\0') {
          cout << line[index];
          index++;
       }
       cout << endl;
    }
    file.close();
   }


void repeat_program() {

  bool condition = true;
  int choice_number;
  char search_letter;
  while (condition) {
      write_dict();
      add_words(search_letter);
      output("Результат.txt");
      cout << "\nХотите продолжить?\n  1. Хочу продолжить.\n  2. Хочу выйти.\nВаш выбор: ";
      cin >> choice_number;
      if (choice_number == 2) {
          cout << "\nРабота завершена." << endl;
          condition = false;
       }
    }
   }

Суть программы: в функции write_dict() частично содержимое файла "Словарь.txt" записывается в файл "Результат.txt" , в функции add_words(char search_letter) в файл "Результат.txt" дописываются слова из файла "Словарь.txt" соблюдая некоторое условие(подробности опускаю и код даю частичный, в целях избежать громоздкости и не потерять суть проблемы), в функции output(char *name_of_file) содержимое файла "Результат.txt" выводится на экран, в функции repeat_program() весь алгоритм повторяется, пока пользователь этого желает. Проблема: всё отлично выполнится в первый раз, но когда алгоритм начнёт повторятся в строке ifstream file("Словарь.txt"); в функции write_dict() возникнет ошибка "Необработанное исключение по адресу 0x0F53234C (msvcp140d.dll) в task1.exe: 0xC0000005: нарушение прав доступа при чтении по адресу 0xEBE2FF20." С помощью дебагера я поняла, что причина кроется в строке ofstream file_out("Результат.txt", ios_base::app); функции add_words(char search_letter). Если не создавать файл file_out для дозаписи в него информации и выводить всё просто на экран консоли, то всё работает. Как решить эту проблему?


Ответы (0 шт):