@Kranj1

Из-за чего возникает ошибка Segmentation fault (core dumped)?

Имеется класс
class Car
    {
        public:
        Car()
        {
            std::string Availability = "None";
            std::string brand = "";
            int carAge = 0;

        };
        Car( const std::string &avail, const std::string &brand, int carAge)

        {

            Availability = avail;
            this->brand = brand;
            this->carAge = carAge;

        };

        void Print()
        {
            std::cout << Availability << std::endl;
            std::cout << brand << std::endl;
            std::cout << carAge << std::endl;
        }

private:
         std::string Availability;
         std::string brand;
         int carAge;

    };


Вот сама программа:
int main()
     {

         std::string path = "flash.txt";
         Car newcar("Yes", "Porsche", 5);
        std::ofstream fout;
        fout.open(path, std::ofstream::app);
        if (!fout.is_open())
        {
                std::cout << "Ошибка. Не удалось открыть файл" << std::endl;
        }
        else
        {
            std::cout << "Удалось открыть файл. Операция успешна" << std::endl;
            fout.write((char*)&newcar, sizeof(Car));
        }
        fout.close(); 

        
        std::string path = "flash.txt";
        std::ifstream fin;
        fin.open(path);
        if (!fin.is_open())
        {
            std::cout << "Не открылся файл"<< std::endl;
        }
        else
        {
            std::cout << "Файл открылся" << std::endl;
            Car machine;
           while (fin.read((char*)&machine, sizeof(Car)))
            {
                machine.Print();
            }
            
            
        }
        fin.close();
        
     }


выдает ошибку Segmentation fault (core dumped). Гуглил. Дебажил. Возникает ошибка при работе метода print. Час голову ломал, но я еще новичок, не знаю что с этим делать. В чем причина данной ошибки?
  • Вопрос задан
  • 201 просмотр
Решения вопроса 1
jcmvbkbc
@jcmvbkbc
"I'm here to consult you" © Dogbert
выдает ошибку Segmentation fault (core dumped).
В чем причина данной ошибки?

class Car
    {
         ...
private:
         std::string Availability;
         std::string brand;
         int carAge;
    };
...
Car machine;
while (fin.read((char*)&machine, sizeof(Car)))

В том, что нельзя сложные объекты так записывать в файл и читать из файла. Так можно обращаться с объектами содержащими свои данные в непрерывном участке памяти. std::string к таким классам объектов не относится.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы