c++ - 删除后访问迭代器导致崩溃

标签 c++ pointers crash iterator

所以我习惯了用 C# 编码,并且在相当长的一段时间后才开始再次使用 C++。本质上,我想做的是创建一个程序,其中包含类(class)中具有 ID 的学生列表。

我有这段代码,基本上可以打印出类(class)中所有可用的学生。

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;

你需要在环境中删除这个项目。

关于c++ - 删除后访问迭代器导致崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30566433/

相关文章:

linux - 为什么我的程序在安装在 Linux 中的 NTFS 分区上运行时,其核心转储始终为零字节?

objective-c - tvOS 应用程序 - UIAlertController 与 UIAlertAction 崩溃

c++ - 为什么 struct with auto_ptr 和显式析构函数无法交换

java - 是否有任何技术原因导致 Java 应用程序和 C++ 应用程序之间的吞吐量存在显着差异?

arrays - Rust 中指向行的指针

c# - 使用 ref 而不是 P/Invoke 的固定指针

arrays - C#——从指针创建托管数组

Excel 崩溃,VBA 用户窗体无法保存

c++ - QLibraryInfo 似乎没有加载 qt.conf

c++ - memcpy 模板变体中的错误