我有一个班级学生和动态创建的学生阵列:
class Student{
public:
void create(){
system("cls");
cout << "First name: ";
cin >> fn;
cout << "Last name: ";
cin >> ln;
cout << "How many subjects? ";
cin >> sub_number;
subjects = new string[sub_number];
for(int i = 0; i < sub_number; i++){
cout << "Subject name: ";
cin >> subject[i];
}
}
//This just display the student with a bunch of couts
friend ostream& operator<<(ostream&, const Student&);
~Student(){ delete[] subjects; }
private:
string fn;
string ln;
string* subjects;
int sub_number;
};
Run Code Online (Sandbox Code Playgroud)
我需要将此数组的大小增加1并添加一个新学生.
当我尝试简单地做到这一点:
void main(){
int stu_number = 0;
cout << "How many students? "
cin >> stu_number;
Student* students = new Student[stu_number];
//creating/updating initial students using user input
for(int i = 0; i < stu_number; i++){
students[i].create();
}
//displaying all students
for(int i = 0; i < stu_number; i++){
cout << students[i];
}
//trying to add a student
add_new_student(students, stu_number);
//displaying all students again
for(int i = 0; i < stu_number; i++){
cout << students[i];
}
}
Run Code Online (Sandbox Code Playgroud)
和add_new_student函数:
void add_new_student(Student* students, int& stu_number){
Student* temp = new Student[stu_number++];
for (int i = 0; i < stu_number - 1; i++){
temp[i] = students[i];
}
temp[stu_number - 1].create();
delete[] students;
students = temp;
}
Run Code Online (Sandbox Code Playgroud)
我收到内存冲突错误和未处理的异常:访问冲突在add_new_student函数内写入位置0xABABABAB.
我不能用std::vector或者std::list因为这是一个学校作业:)
要增加数组的大小,您基本上必须:
话虽这么说,如果你能够我建议切换到,std::vector因为它有实用程序方法,将为您调整大小.