Это испорченная память, где-то ошибка в управлении памятью (например, запись за границами массива).
UPD.
Ваша ошибка: в составе std::string есть внутренние неконтролируемые поля, и его нельзя побайтово сохранять в файл. Такими неконтролируемыми полями могут быть указатели, кэши-ускорители и многое другое. Вообще std::string состоит из указателя или двух, и отсюда следуют две вещи. 1) При сохранении в файл не попадут строковые данные, попадёт только указатель. К тому же в Windows нет хорошего 16-ричного просмотрщика, а без него при работе с файлами как без рук (по крайней мере начинающему, я давно обхожусь). 2) Как только вы этот указатель загрузите, std::string портится, и на деструкторе может случиться что угодно.
Вам надо самим придумать формат файла и реализовать загрузку/сохранение, используя length(), data() и front().
Важное правило: ткни в любой байт дампа вашего файла — вы должны сказать, что он значит. Из-за сложности формата это может быть сложно. Байт может быть неиспользуемым или оставленным для совместимости, но какое-то значение должно быть. Если формат многоуровневый, надо сказать назначение на всех уровнях: например, «это значение атрибута XML» на уровне XML и «это имя студента» на прикладном уровне.
Исключение: если есть объект-«чёрный ящик», который написан не нами и сериализуется гарантированно корректно, достаточно сказать: «это часть чёрного ящика». (Сериализуется — это переводится в цепочку байтов, например, файл или сетевой поток.)
Что ещё пока вижу (но это не причина ошибки).
1.
unsigned short int *exam_t = new unsigned short int[5];
Нет нужды new, невелик массив. Хватает локального массива на стеке. Аналогично остальные два new.
2. Нет нужды давать clear/close. Это фишка Си++, автоматически сработает деструктор.
3. Не называйте переменную flag, называйте wasFound (или что она реально значит).
4.
sizeof(&student_r)
только чудом совпадает с
sizeof(student_r)
.
5. Не надо писать
flag == false
, надо !flag.
6. Функция del_reversive делает излишнюю работу и переставляет студентов, к тому же есть стандартный алгоритм remove_if.
7.
while (!flag)
в del_rev бессмысленно.
8. Вы же работаете со string’ами — зачем вводить информацию в буфер ограниченной длины?
9. Программа не модульная, нет нужды в хедере.