Мало того, что код утечки памяти (создание нового Student
в readStudent
, который никогда не удаляется), в main
вы используете неинициализированный указатель для вызова readStudent
. Возможно, это повреждает вашу кучу так, что вызов new бросает std::bad_alloc
.
Еще раз взглянем на управление памятью в C ++ и время жизни объектов. Здесь вообще нет необходимости использовать указатели. В качестве отправной точки, ваш main
может быть изменен на это:
int main() {
Student stud3;
std::cout << "Please insert name for student:" << std::endl;
stud3.readStudent(std::cin);
}
Возможно, было бы также лучше, если бы вы прочитали имя в main
(как std::string
), а затем передали имя непосредственно конструктору Student
:
int main() {
std::cout << "Please insert name for student:" << std::endl;
// Read in the name.
std::string name;
std::cin >> name;
// Create the student with the input name.
Student stud3(name);
}