次のデータ構造を使用するコードに奇妙なセグメンテーション違反があります:
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);
何か案が ?