нарушение доступа для чтения с бинарным файлом

208
18 мая 2018, 19:00
using namespace std;
string Get_write(string login, ifstream &fb1)
{
User x;
string a;
fb1.open("data.dat",  ios::binary | ios::in | ios::out);
//fb1.seekg(sizeof(User) * 0, ios::beg);
fb1.read((char *)&x, sizeof(User));
while (!fb1.eof() || ((x.Get_NickName()) != login))
{
    fb1.read((char *)&x, sizeof(User));
}
//a = x.Get_Pass();
fb1.close();
return a;
}
bool Proverka_Logina(string login)
{
User x; bool tr = false;
fstream fb;
fb.open("data.dat", ios::out | ios::binary | ios::app);
do
{
    fb.read((char *)&x, sizeof(User));
    if (x.Get_NickName() == login)
    {
        tr = true;
    }
} while (!fb.eof());
fb.close();
if (tr = true)
{
    return true;
}
return false;
}

case 2:
    cout << "\nВведите логин пользователя: ";
    cin >> login;
    if (Proverka_Logina(login) == true)
    {
        ifstream fb1;
        password = Get_write(login,fb1);
    } 
    do
    {
    cout << "Введите пароль: ";
    cin >> password;
    } while (Klient.Get_Pass() != password);
    break;
default:
    break;
}
}

Здравствуйте, третий час сижу и не могу понять, выдает ошибку при выходе из функции Get_write, помогите пожалуйста!

Answer 1

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

fb1.read((char *)&x, sizeof(User));

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

На фоне этого стандартная ошибка

while (!fb1.eof() 

это уже и вовсе мелочи...

READ ALSO
Подключение класса в cli c++

Подключение класса в cli c++

Вопрос на счет подключения своих классов в cli, есть код, и при подключении класса с интами все хорошо, но при попытке подключить со string выдает...

243
Умные указатели. C++

Умные указатели. C++

Имеется такая иерархия классов:

214
Что означает запись vector&lt;unsigned char&gt; vec(300)

Что означает запись vector<unsigned char> vec(300)

Что означает запись vector<unsigned char> vec(300)? Именно если в конструктор передается число

181
Ошибка в коде программы

Ошибка в коде программы

Столкнулся с проблемой в коде:

200