std::map<K, V>.clear() 在损坏的双链表中崩溃
std::map<K, V>.clear() crashes in corrupted double-linked list
所以我得到了变量
std::map<std::string, std::shared_ptr<MyClass>> m_map;
在程序关闭例程期间,我想利用奇妙的智能指针属性,一旦MyClass
实例自己的最后一个引用被销毁,它应该(如果我没错的话(负责销毁它们。
所以我只是打电话给m_map.clear()
,但是这个
有时产生上述
corrupted double-linked list
而在其他情况下(未知因此不受控制的变量(正常工作,
最后在其他情况下(受控变量;实际上,不同的程序配置(产生
terminate called after throwing an instance of 'std::runtime_error*'
我很乐意至少收到一些关于解决问题的方法的提示。由于该程序是强多线程的(而且我对它知之甚少(,我想知道删除指向MyClass
实例的指针是否会干扰其他内容。
当您从至少 2 个不同的线程调用至少 2 个影响结构的方法时,会导致这种类型的错误。
例如,在 std::map 上调用 clear(( 将更改映射本身的结构(删除所有项目(。如果你有另一个线程同时使用该映射(IE.循环它,插入等(,那么你将有你看到的异常。
导致异常的原因是,当您尝试访问 std::map 结构时,它处于无效状态(映射节点正在更改位置(。
最简单的解决方案是在访问该地图对象时保持锁定。
相关文章:
- 为什么C中的通用链表中存储的数据已损坏
- 为什么链表中的数据在嵌套函数中会更改/损坏?
- 第一次运行程序时出现损坏的双链表错误,后续运行正常
- glibc 损坏了 RHEL 5 中的双链表
- 中的错误:双链表0xb2808cf8 C++损坏
- C++glibc检测到损坏的双链表错误C++
- 链表实现的堆栈损坏
- glibc 检测小箱链表已损坏
- 链表中C++内存损坏
- C++:glibc检测到损坏的双链表:0x08f8f148
- 我的双向链表中的查找函数损坏
- 我将如何在不损坏列表的情况下删除链表中的节点
- 损坏的双链表
- C++:损坏的双链表和内存损坏
- C++ Linux 中的双链表损坏
- c++ - Smallbin双链表损坏
- 当我在调用append后立即实例化Node时,链表会损坏
- 损坏的双链表:0x0804d0c0 (c++)
- std::map<K, V>.clear() 在损坏的双链表中崩溃
- 机器相关的损坏的双链表错误