删除后访问迭代器会导致崩溃

Accessing Iterator After Deletion Causes Crash

本文关键字:崩溃 迭代器 访问 删除      更新时间:2023-10-16

所以我已经习惯用c#编码了,经过一段相当长的休息后,我又开始使用c++了。从本质上讲,我要做的是创建一个程序,其中包含课程中具有id的学生列表。

我有这段代码,它打印出课程中所有可用的学生。

auto allCourses = WSUCourse::getAllCourses();
   std::for_each(
       allCourses.begin(),
       allCourses.end(),
       GetCoursePrinter());

GetCoursePrinter()在此代码中在构造函数

中调用
struct GetCoursePrinter
{
   void operator () (
      MyCourse *coursePtr
   )
   {
      std::cout << coursePtr->getIdentifier() <<
         ": " <<
         coursePtr->getTitle() <<
         std::endl;
   }
};

我的问题是在我删除注册后,像这样

MyEnrollment *enrollmentPtr = MyEnrollment::findEnrollment(
   MyStudent::getStudentWithUniqueID(1000002),
   MyCourse::getCourseWithIdentifier("CS 2800")
);
delete enrollmentPtr;

然后尝试用GetCoursePrinter打印它,它崩溃了。我相信这是因为它试图获取一些不存在的东西。我想知道的是是否有一种方法可以将这样的东西命名为

if (allCourses.current() != null)
{
    GetCoursePrinter();
}
else
{
    //do nothing
}

当你调用:

delete enrollmentPtr;

您需要从环境中删除此项