Проблемы чтения и записи класса в бинарном файле

Ошибка происходит в функциях read и SortByAlphaBet На строках 31 , 78 только после того как я дописываю данные в файл функцией WriteToEnd

#include <iostream>
#include <string>
#include <fstream>
#include <set>
#include <vector>
using  namespace std;

class info{
public:
    string PIB;
    int dd;
    int mm;
    int yy;
    char gender;
    void print() {
            cout << "ПІБ - " << PIB << endl;
            cout << "Число народження - " << dd << endl;
            cout << "Місяць народження - " << mm << endl;
            cout << "Рік народження - " << yy << endl;
            cout << "Пол - " << gender << endl;
    }
    void enter() {
        cin >> PIB >> dd >> mm >> yy >> gender;
    }
};

void read() {
    ifstream ifstr;
    info infobase;
    ifstr.open("file.bin",ifstream::binary);
    while (ifstr.read((char*)&infobase, sizeof(info))) {
        infobase.print();
    }
    ifstr.close();
    system("pause");
}

void write() {
    ofstream ofstr("file.bin",ofstream::binary);
    info infobase;
    int a = 1;
    while (a) {
        cout << "0.Вихід\n";
        cout << "1.Ввести нові данні\n";
        cin >> a;
        if (a == 1) {
            cout << "Введіть піб>>число народження>> місяць народження >> рік народження >> пол (Ч або Ж)\n";
            infobase.enter();
            ofstr.write((char*)&infobase, sizeof(info));
        }
    }
    ofstr.close();
    system("pause");
}

void WriteToEnd() {
    ofstream ofstr("file.bin", ofstream::app , ofstream::binary);
    info infobase;
    int a = 1;
    while (a) {
        cout << "0.Вихід\n";
        cout << "1.Додати данні в кінець файлу\n";
        cin >> a;
        if (a == 1) {
            cout << "Введіть піб>>число народження>> місяць народження >> рік народження >> пол (Ч або Ж)\n";
            infobase.enter();
            ofstr.write((char*)&infobase, sizeof(info));
        }
    }
    ofstr.close();
    system("pause");
}

void SortByAlphabet() {
    ifstream ifstr("file.bin", ifstream::binary);
    info infobase[100];
    for (int i = 0 ;ifstr.read((char*)&infobase[i], sizeof(info));i++) {
            infobase[i].print();
    }
    ifstr.close();
}

int main()
{
    system("chcp 1251");
    system("cls");
    int a,b = 1,c = 0;
    const int size = 100;
    do{
        cout << "Виберіть номер дії\n";
        cout << "1. завантажити всі дані з файлу на екран\n";
        cout << "2. ввести нові дані в файл\n";
        cout << "3. додати даних в кінець файлу\n";
        cout << "4. сортування бази даних за алфавітом (за прізвищем)\n";
        cout << "5. сортування бази даних за віком\n";
        cout << "6. виведення: список людей, що народилися в заданому місяці\n";
        cout << "7. виведення: прізвище самого старшого чоловіка\n";
        cout << "8. виведення: всі прізвища, що починаються із заданою літери\n";
        cout << "0. вихід з програми\n";
        cin >> a;
        system("cls");
        switch (a) {
        case 1:
            read();
            break;
        case 2:
            write();
            break;
        case 3:
            WriteToEnd();
            break;
        case 4:
            SortByAlphabet();
            break;
        case 5:

            break;
        case 6:

            break;
        case 7:

            break;
        case 8:

            break;
        case 0:
            b = 0;
            break;
        default:
            cout << "Помилка\n";
            system("pause");
            break;
        }
    } while (b == 1);
}

Ответы (0 шт):