在c ++中增加自定义对象数组的大小

Koc*_*r4d 0 c++ arrays

我有一个班级学生和动态创建的学生阵列:

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因为这是一个学校作业:)

Cor*_*mer 5

要增加数组的大小,您基本上必须:

  • 创建一个更大的新数组
  • 将旧的较小数组中的值复制到新的较大数组
  • 删除旧的较小的数组

话虽这么说,如果你能够我建议切换到,std::vector因为它有实用程序方法,将为您调整大小.

  • 另请注意,您的最后一行`students = temp`泄漏了`students`曾经指向的旧数组. (3认同)