Вызывается исключение: нарушение доступа для чтения после delete []
void user_reg() {
string temp;
int age;
FILE* f = fopen("users.txt", "a");
if (f == NULL)
{
cout << "Файла не существует\n\n";
return;
}
User u;
cout << "Введите имя пользователя: ";
getline(cin, temp);
u.Set_name(temp);
cout << "Введите пароль: ";
getline(cin, temp);
u.Set_password(temp);
cout << "Введите возраст: ";
cin >> age;
u.Set_age(age);
cin.ignore();
cout << "Введите номер телефона: ";
getline(cin, temp);
u.Set_phoneNumber(temp);
cout << "Введите email: ";
getline(cin, temp);
u.Set_email(temp);
fwrite(&u, sizeof(u), 1, f);
fclose(f);
return;
}
void user_aut() {
int i = 0;
string name;
bool user_exist = false;
FILE* f = fopen("users.txt", "r");
if (f == NULL)
{
cout << "Файла не существует\n\n";
return;
}
long ch = _filelength(_fileno(f)) / sizeof(User);
User* mas = new User[ch];
cout << "Введите имя пользователя: ";
getline(cin, name);
if (!fread(mas, sizeof(User), ch, f))
{
cout << "Пользователей с таким именем не существует\n\n";
delete[] mas;
fclose(f);
return;
}
for (i; i < ch; i++)
{
if (mas[i].Get_name() == name)
{
user_exist = true;
break;
}
}
if (user_exist)
{
cout << "Введите пароль: ";
getline(cin, name);
if (mas[i].Get_password() == name) {
cout << "\nВход успешен";
}
}
else {
cout << "Пользователей с таким именем не существует\n\n";
}
fclose(f);
delete[] mas;
return;
}
Структура
struct User {
private:
string name;
string password;
string phoneNumber;
string email;
int age;
public:
User() {
age = 0;
name = "0";
password = "0";
phoneNumber = "0";
email = "0";
}
User(string name, string password, string phoneNumber, string email, int age) {
this->age = age;
this->name = name;
this->password = password;
this->phoneNumber = phoneNumber;
this->email = email;
}
void Set_name(string name) {
this->name = name;
}
string Get_name() {
return name;
}
void Set_password(string password) {
this->password = password;
}
string Get_password() {
return password;
}
void Set_phoneNumber(string phoneNumber) {
this->phoneNumber = phoneNumber;
}
string Get_phoneNumber() {
return phoneNumber;
}
void Set_email(string email) {
this->email = email;
}
string Get_email() {
return email;
}
void Set_age(int age) {
this->age = age;
}
int Get_age() {
return age;
}
void inform() {
cout << "Имя: " << name << "\nВозраст: " << age << "\nНомер телефона: " << phoneNumber << "\nEmail: " << email << endl << endl;
}
};
В первой функции произвожу запись объекта структуры в файл через fwrite, во второй функции считываю все объекты из файла с помощью fread в массив и нахожу объект у которого имя будет совпадать с тем что я ввожу с клавиатуры. Ошибка возникает при попытке освободить память при помощи delete[] во второй функции, причем появляется она только после fread. С чем это связано и как это исправить?