Ваша проблема здесь
DisplayStudentsNames(*array,3);
То, что вы фактически передаете DisplayStudentNames()
, вот первый элемент - массив array
. Проблема в том, что array[0]
это не массив, это указатель на один объект. Поэтому, когда вы пытаетесь повторить его, вы получаете неопределенное поведение, исключение будет наилучшим случаем scienorio здесь (как вы видели с вашим бесконечным l oop).
Вы можете исправить это, изменив
DisplayStudentsNames(*array,3);
до
DisplayStudentsNames(array,3);
и DisplayStudentsNames
до Student**
Также это не сработает:
cout << array[i].name << endl;
Каждый элемент в array
является указателем на объект Student
, а в C ++ для доступа к объекту через указатель требуется использование оператора ->
(поэтому вместо него array[i]->name
).
Примечание:
Student(string name){
this->name = name;
}
Это плохо для C ++, вместо этого используйте списки инициализаторов для задания элементов при создании, так как он позволяет оптимизировать компилятор и его легче читать