背景🎈🎈🎈:test为map,要删除test中key为“happy”的键值对。代码如下:
- std::map
uint32_t>::iterator it; -
- for ( it= test.begin(); it!= test.end(); ++it) {
-
- if (strcmp(“happy”, (it->first).c_str()) == 0) {
-
- test.erase(it);
-
- }
-
- }
报错😱😱😱:
Segmentation fault (core dumped)。
分析🐯🐯🐯:
it指针被erase之后会失效,造成了程序崩溃。
解决方法💉💉💉:
it++返回自增前的迭代器临时拷贝。erase之后临时迭代器指向的内容被删除,但是it本身已经自增到下一位置。程序会正常运行。
代码如下:
- std::map
uint32_t>::iterator it; -
- for ( it= test.begin(); it!= test.end(); ) {
-
- if (strcmp(“happy”, (it->first).c_str()) == 0) {
-
- test.erase(it++);
-
- }
-
-
-
- else{
-
- it++;
-
- }
-
- }