Имеется такая структура:
struct account {
string login;
string pass;
bool admin;
};
И такая функция:
bool auth() {
account user;
account input;
ifstream fin("users.bin", ios::binary | ios::in);
if (fin.is_open()) {
while (true) {
system("cls");
cout << "login: ";
getline(cin, input.login);
cout << "pass: ";
getline(cin, input.pass);
while (!fin.eof()) {
fin.read((char*)&user, sizeof(user));
if (input.login == user.login && input.pass == user.pass) {
fin.close();
system("cls");
cout << "hello, " << user.login << "\n" << endl;
cout << "press any key...";
_getwch();
return user.admin;
}
}
system("cls");
cout << "Incorrect login or password\n" << endl;
cout << "press any key...";
_getwch();
fin.clear();
fin.seekg(0, ios::beg);
}
}
else {
cout << "File is not avalible" << endl;
abort();
}
}
При завершении работы функции именно у объекта user
, видимо, не получается удалиться, и вызывается исключение read access violation
fin.read((char*)&user, sizeof(user));
Вот так - просто в память - можно считывать только то, что называется POD - plain old data. Тот же string
- это сложный класс, в котором хранятся указатели на динамически выделенную память и т.п. вещи. Вы считали какой-то указатель, который когда-то - в другой программе, быть может - указывал в какое-то правильное, корректно выделенное место в памяти. А теперь куда он указывает?
Именно. Хрен знает куда.
Потому и получается хрен знает что, когда программа пытается корректно освободить память - непонятно какую, непонятно где.
Категорически нельзя так хранить серьезные вещи. Тот же string
, если нужно бинарное хранение, лучше записать как целое число - количество символов, а потом сами символы. А затем, когда считываете, сначала считываете длину, готовите соответствующий буфер, читаете в него строку и собираете объект string
.
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Виртуальный выделенный сервер (VDS) становится отличным выбором
среда разработки: RADstudio c++builder (разработка под android)
Итак, у меня есть 1 тестовое приложение и 1 библиотека, которая подключается к приложениюПроблема заключается в том, что, функции неопределенны,...
Какие отличия функций c++ от функций в c?
Помогите пожалуйста, прогорает экзаменсделать прогу на C++