删除后访问迭代器会导致崩溃
Accessing Iterator After Deletion Causes Crash
所以我已经习惯用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;
您需要从环境中删除此项
相关文章:
- 使用std::multimap迭代器创建std::list
- 来自 std::list 的迭代器 .end() 按预期返回"0xcdcdcdcdcdcdcdcd"但 .begin()
- C++中带有List类的迭代器Segfault
- 如何在c++迭代器类型中包装std::chrono
- 集合上的输出迭代器:assign和increment迭代器
- Boost Spirit,获取迭代器内部语义动作
- 对于set上的循环-获取next元素迭代器
- 为什么output_editor Concept不需要output_e迭代器标记
- c++17文件系统::recursive_directory迭代器()在mac上没有给出这样的目录,但在windows上
- 比较迭代器会使程序崩溃,而不会在自定义气泡排序实现中出现错误
- 矢量迭代器在尝试调用函数时使我的程序崩溃
- 迭代器擦除矢量中的元素无效,但它不会崩溃
- C XTREE崩溃在出口上,映射/设置迭代器不可用
- 自己的迭代器因 std::sort 而崩溃
- 使用迭代器的递归调用崩溃
- Vector::迭代器在与开始比较时崩溃
- C++-映射迭代器中的if语句导致程序崩溃的原因
- C++向量迭代器:erase() 最后一个项目崩溃
- QMap 迭代器崩溃
- 删除后访问迭代器会导致崩溃