我写过两个课程:学生和课程。课程班有一名学生*学生作为其正文中的数据成员。在我的顶级StudentReviewSystem中,我有一个Course *课程作为数据成员,我有一个deleteCourse(const int courseId)方法,用“courseId和resizes”课程删除课程。这是我的deleteCourse方法代码:< / p>
void StudentReviewSystem::deleteCourse(const int courseId){
int index = 0;
bool found = false;
//temp arr
Course *temp = new Course[courseSize];
for(int i = 0; i < courseSize && !found; i++){
if(courseId == courses[i].getCourseId()){
index = i;
found = true;
}
}
if(found){
temp = courses;
courses = new Course[courseSize-1];
for(int i = 0; i <= index-1;i++ ){
courses[i] = temp[i];
}
for(int i = index+1; i < courseSize; i++){
courses[i-1] = temp[i];
}
delete[] temp;
cout << "Course has been deleted!" << endl;
courseSize--;
}
}
当我尝试删除temp时,我得到一个“glibc detected”错误,其下有一个内存映射,然后是当时中止(核心转储)错误。但当我注释掉行删除[] temp; , 有用。你能帮助我吗,我是C ++的新手。
谢谢...
P.S:当我注释掉〜Course(){delete [] students;}析构函数时,它再次起作用。我想我有一个非常愚蠢的问题,再次感谢你......
答案 0 :(得分:2)
你犯了一个典型的错误:你的班级有双重责任。
解决方案很简单:
第一堂课已经可用(std::vector
),如果有必要(也就是说,老师问你),那么你可以重新编码std::vector
;否则按原样使用。详细了解std::vector
。
答案 1 :(得分:1)
您的错误是您在课程课程中没有遵循三级规则。
有关详细信息,请参阅here。
你应该在你写的每个班级都遵守三条规则。因为您没有遵循三条规则,所以任何复制Course对象的尝试(就像您上面尝试的那样)都会使您的程序崩溃。
我会说理解三的规则是成为一名体面的C ++程序员的第一步。
答案 2 :(得分:0)
也许您尝试删除尚未由new分配的数组。