@GineTik

Ошибка xmemory при return, как пофиксить?

Привет!

У меня есть такой код
template<typename T>
vector<T> Read(string path)
{
    ifstream myFile(path, ios::in | ios::binary);
    vector<T> arr;

    T item;
    while (myFile.read((char*)&item, sizeof(T))) {
        arr.push_back(item);
    }

    myFile.close();
    return arr;
}


и такой мейн
auto users = Read<User>("user.dat");
    for (int i = 0; i < users.size(); i++)
    {
        cout << users[i].getUsername() << " " << users[i].getPassword() << endl;
    }


При запуске переходит к файлу xmemory и говорит - нарушение прав доступа

При помощи дебага понял что все работает отлично, но при ретурне выскакивает ошибка
  • Вопрос задан
  • 442 просмотра
Решения вопроса 1
wataru
@wataru Куратор тега C++
Разработчик на С++, экс-олимпиадник.
Скорее всего, тип User нельзя вот так вот читать и писать в файл. Подозреваю, что там содержатся std::string, которые сами в себе хранят лишь указатели на символы в строке. Поэтому, если std::string записать в файл как набор байт, то вы запишете в файл указатели. Прочитав их назад из файла, вы получите случайне адреса, не указывающие ни на что.

Вам придется писать руками ввод и вывод типа из файла.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы