我的代码中有一个奇怪的分段错误,它使用以下数据结构:
map< uint64_t, set<uint64_t> > _key_to_block;
Valgrind 抱怨_key_to_block.erase(it)
这条消息:
Address 0x6106118 is 56 bytes inside a block of size 88 free'd
像这样从地图中删除元素:
map< uint64_t, set<uint64_t> >::iterator it = _key_to_block.find(key);
(it->second).clear();
_key_to_block.erase(it);
此外,Valgrind 还抱怨(it->second).insert(k);
这种按摩:
Invalid read of size 8
用于在 STL 集中插入元素,如下所示:
map< uint64_t, set<uint64_t> >::iterator it = _key_to_block.find(key);
(it->second).insert(value);
但是,它并没有抱怨这一行:
setit = it->second.find(value);
任何想法 ?