我正在尝试设计一个StudentReviewSystem,它只包含课程,学生等。现在,我正在尝试将课程对象添加到课程数组中。因为,我正在动态地做;当我插入一个新课程时,我将olders复制到新数组并插入新数组。但是,当我删除旧的数组时,它会给我无效的指针错误。我想不通为什么?谢谢你的帮助。
void StudentReviewSystem::addCourse(int courseId, string courseName) {
//increment number of courses
setNumCourses(numCourses + 1);
Course* newCourses = new Course[numCourses];
if (courses != NULL) {
// copy courses to new one
for (int i = 0; i < numCourses - 1; i++) {
newCourses[i].setCourseId(courses[i].getCourseId());
newCourses[i].setCourseName(courses[i].getCourseName());
}
// delete old courses
delete courses;
}
newCourses[numCourses - 1].setCourseId(courseId);
newCourses[numCourses - 1].setCourseName(courseName);
courses = newCourses;
}
这是课程课程。
#include "Course.h"
Course::Course() {
}
Course::~Course() {
}
int Course::getCourseId() const {
return courseId;
}
void Course::setCourseId(int courseId2) {
courseId = courseId2;
}
string Course::getCourseName() const {
return courseName;
}
void Course::setCourseName(string courseName2) {
courseName = string(courseName2);
}
这是主要的。
int main() {
StudentReviewSystem srs;
srs.addCourse(111, "foo");
srs.addCourse(222, "foo");
srs.addCourse(333, "foo");
srs.addCourse(444, "foo");
return 0;
}
答案 0 :(得分:2)
我想你忘记了一些事情:delete [] courses;
实际上删除了数组 - 你只是删除指针。
答案 1 :(得分:1)
这不是您问题的答案,但我想告诉您可以使用标准库执行此操作。一种方法是std :: map,一种是std :: vector。
我建议一张地图:
#include <map>
#include <string>
std::map<int, string> courses;
添加课程:
courses[111] = "foo";
课程数量:
courses.size();
或者你可以改用std :: vector。
#include <vector>
std::vector<Course> courses;
添加:
courses.push_back(Course(111, "foo"));
课程数量与地图相同。