Непонятная ошибка при выполнении метода Create (C++)

Использую метод Addstudents , чтобы добавить зачетку в массив зачеток , которые находятся в классе Group , но после ввода Фамилии непонятная ошибка (Вызвано исключение: нарушение доступа для записи. _Left было 0x4. ), которая рушит всю программу полностью.

#include <iostream>
#include <fstream>
using namespace std;

class Studentrecordbook
{
private:
   string firstname;
   string secondname;
   string middlename;

public:
   int size = 5;
   string* grade = new string[size];
   string* date = new string[size];
   string* exam_name = new string[size];

   Studentrecordbook()
   {

   };

   void Create()
   {
       cout << "Введите Фамилию" << endl;
       cin >> secondname;
       cout << "Введите Имя" << endl;
       cin >> firstname;
       cout << "Введите Отчество" << endl;
       cin >> middlename;
       cout << "Введите количество экзаменов" << endl;
       cin >> size;
       for (int i = 0 ; i < size; i++)
       {
           cout << "Введите Название дисциплины" << endl;
           cin >> exam_name[i];
           cout << "Введите Дату экзамена" << endl;
           cin >> date[i];
           cout << "Введите Оценку" << endl;
           cin >> grade[i];
       }

   }

   void WriteText()
   {
       cout << secondname << ' ' << firstname << ' ' << middlename << ":\n\n";
       for (int i = 0; i < size ; i++)
       {
           cout << exam_name[i] << '\t' << date[i] << '\t' << grade[i] << endl;
       }
   }
};

class Group : public Studentrecordbook
{
public:
   int count;
   Group* student = new Group[count];
   string command;

   Group()
   {

   };

   void Addstudent()
   {
       cout << "Сколько зачеток хотите создать?: " << endl;
       cin >> count;
       for (int i = 0; i < count; i++)
       {
           cout << "Введите информацию о " << i + 1 << " студенте:" << endl << endl;
           student[i].Create();
       }
   }

   void Commands()
   {
       cout << "Вывод всей информации о студентах :  INFORMATION" << endl;
       cout << "Поиск информации о конкретном студенте : SEARCHSTUDENT" << endl;
       cout << "Выход : EXIT" << endl;

       cin >> command;

       if (command == "INFORMATION")
       {
           for (int i = 0; i < count; i++)
           {
               student[i].WriteText();
           }
       }

       if (command == "SEARCHSTUDENT")
       {
           int n = 0;
           cout << "Введите номер студента :" << endl;
           cin >> n;
           student[n - 1].WriteText();
       }

       if (command == "EXIT")
       {
           exit(1);
       }

   }

};

int main()
{
   setlocale(LC_ALL, "Rus");
   Group somestudent;
   somestudent.Addstudent();
   somestudent.Commands();

   return 0;
}


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

Автор решения: Harry

Скажите, сколько памяти вы выделяете здесь:

int count;
Group* student = new Group[count];

Но это не все.

Итак, мы создаем объект класса Group. При создании для поля student выделяется хрен-знает-сколько памяти для новых элементов типа Group. При этом для каждого из них при создании конструктором для поля student выделяется хрен-знает-сколько памяти для новых элементов типа Group. При этом для каждого из них при создании конструктором для поля student выделяется хрен-знает-сколько памяти для новых элементов типа Group. Продолжать?

→ Ссылка