C++ 简单的指针错误无法弄清楚为什么?
C++ Simple Pointer mistake can't figure out why?
我正在尝试设计一个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"));
课程数量与地图相同。
相关文章:
- N-queen问题:无法弄清楚为什么我的解决方案不起作用
- 循环不继续无法弄清楚为什么
- 无法弄清楚为什么没有调用重载运算符 []
- 谁能弄清楚为什么我的循环会失败?
- C++需要弄清楚为什么这个 for 循环不起作用
- 使用指针和引用,无法弄清楚为什么DFS无限重复
- 无法弄清楚为什么我的打印阵列要替换元素
- 我的程序不断抛出编译错误,我无法弄清楚为什么会发生错误
- 我在while循环中遇到问题,我只是无法弄清楚为什么它无法按预期工作
- 无法弄清楚为什么这个Arduino代码不起作用?
- 我正在制作一个刽子手游戏,我需要帮助弄清楚为什么它不能完全工作
- 无法弄清楚为什么只从文件中读取一行矩阵以及为什么我无法将 2D 数组传递给函数
- 我很难弄清楚为什么我的双重链接列表会崩溃,我可以找到一些方向
- 无法弄清楚为什么我会得到GL_INVALID_OPERATION
- 我需要帮助弄清楚为什么此C 程序不会使用GNU CC编译器在代码块中构建和运行
- 我无法弄清楚为什么我生成的随机数没有正确存储
- 无法弄清楚为什么我的 str2Int 函数返回 0
- 无法弄清楚为什么代码行会引发异常
- 无法弄清楚为什么我的程序在条件不为真时执行 if 语句(数组)
- 无法弄清楚为什么使用重载比较运算符在执行前调用复制构造函数