C++ 简单的指针错误无法弄清楚为什么?

C++ Simple Pointer mistake can't figure out why?

本文关键字:弄清楚 为什么 错误 简单 指针 C++      更新时间:2023-10-16

我正在尝试设计一个StudentReviewSystem,它只包含课程、学生等。现在,我正在尝试将课程对象添加到课程数组中。从那以后,我一直在动态地做这件事;当我插入一个新课程时,我会将旧课程复制到新数组中并插入新课程。但是,当我删除旧的数组时,它会给我一个无效的指针错误。我不明白为什么?谢谢你的帮助。

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;
}

我想你忘了什么:delete [] courses;实际上删除了数组——你只是删除了指针。

这不是您的问题的答案,但我想向您展示使用标准库可以做到这一点。一种方法是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"));

课程数量与地图相同。