Просто вылетает программа С++.

190
09 мая 2019, 15:50

else if (a == 2)
    {
        ifstream fout;
        fout.open(path);
        if (!fout.is_open()) {
            cout << "Ошибка открытия файла!";
        }
        else {
            cout << "Введите нужную вам станцию: ";
            string station;
            cin >> station;
            TrainInfo train_out;
            while (fout.read((char*)&train_out, sizeof(TrainInfo)))
            {
                if (station == train_out.destination_station)
                {
                    cout << "Номер поезда: " << train_out.number << endl;
                    cout << "Станция отправления: " << train_out.departure_station << endl;
                    cout << "Станция назначения: " << train_out.destination_station << endl;
                    cout << "Время отправления: " << train_out.departure_time << endl;
                    cout << "Время прибытия: " << train_out.arrival_time << endl;
                    cout << "Тип поезда: " << train_out.type << endl << endl;
                }
            }
        }
        fout.close();

Просто вылетает приложение при выборе второго пункта меню после ввода нужной станции. Что не так?(в С++ очень большой новичок) Знаю,что проблема в этой строчке while (fout.read((char*)&train_out, sizeof(TrainInfo))), но как ее исправить?

Answer 1

Ну нельзя читать/писать вот так -

fout.read((char*)&train_out, sizeof(TrainInfo))

что-то, кроме простейших структур! Вряд ли у вас TrainInfo - plain old data (POD). Там же наверняка что-то есть не совсем фундаментальное :)

Рассказывать, как конкретно исправить ситуацию - без знания, что и как у вас объявлено - не получится. Общая идея - ну вот тот же string - это класс, в объете которого указатель, а само содержимое - где-то в памяти.

Получается у вас примерно так - жена говорит собраться в отпуск и в машину в багажник сложить, ну, там, матрас надувной, палатку, мангал и шампуры - ну, в общем, барахло. Вы в багажник кладете бумажки с надписями "Матрас - на антресолях", "Палатка - на балконе" (ваши указатели) и т.д. Так вот сохраняете в багажник/файл...

По приезду на место читаете - вынимаете из багажника бумажки с надписями, где что лежит. Но хуже того, что шкаф теперь совсем другой, балкон тоже, так что втык от жены - это примерно и есть результат вот такого хранения и попытки раскрыть палатку, которой нет...

Поройтесь здесь, на сайте - тут эта тема возникала не раз.

READ ALSO
Странно работает функция C++

Странно работает функция C++

В программе пишутся координаты и длина линиипочему-то не работает х6 y3 длина 3

199
C++. Keyboard Input. Отлов нажатия

C++. Keyboard Input. Отлов нажатия

Всем доброго времени сутокВозможно, дубликат, но пока действенной инфы(кроме либы SDL и std::cin) не увидел

173