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

时间:2015-06-01 05:51:30

标签: c++ pointers crash iterator

因此我习惯于在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
}

1 个答案:

答案 0 :(得分:1)

致电时:

delete enrollmentPtr;

您需要在环境中删除此项目。