前段时间调试程序,发现一个删除一个map元素后,程序就挂掉了,查来查去,发现迭代器删除后没有重新赋值,这样迭代器指向的数据乱码,而且程序就会挂掉。
所以,使用stl中的迭代器时,无论时vector、list还是map,使用earse后记住将迭代器的值重新赋值(iterator = map.erase(iterator) ),因为earse后,迭代器地址不变,不重新赋值会变成野指针。
关于迭代器,已经earse后的地址验证,这篇文章有详细描述:vector中使用erase操作删除迭代器的问题(避免野指针)以及end的地址变化-优快云博客
迭代器删除后重置:避免STL容器野指针问题
文章讲述了在调试过程中遇到的问题,即删除STL容器(如map)的元素后,如果没有正确处理迭代器,可能导致迭代器变为野指针并引发程序崩溃。作者强调了在使用`erase`后务必更新迭代器,以确保其指向正确的位置。
1万+





