我有以下问题: 我已经定义一个boost ::的multi_index_container,这里其通过一个成员函数指针&TYPE::m_id
其中m_id
是积分型散列一个TYPE
简化定义boost :: multi_index_container擦除函数重新?
boost::multi_index::multi_index_container<
TYPE * ,
boost::multi_index::indexed_by<
boost::multi_index::hashed_unique<
boost::multi_index::tag<by_hashed_id>,
boost::multi_index::member<TYPE, const TYPE, &TYPE::m_id>
>
>
> map;
当我删除对象以下列方式:
hashMap = map.index.get<by_hashed_id>()
it = hashMap.find(30);
delete *it; /// Delete the underlying pointer
hashMap.erase(it); /// Delete in the map (segfault if the map is rehashed (?))
此代码似乎崩溃时抹去试图重提地图, 是否有人知道这是不是普遍行为,是一个erase
函数可能会在删除指针之前重新组合,这将导致段错误,因为指针已被删除。 (当然,解决方法是:将erase
下delete
这无论如何是比较合适的!)
我得到了下面最后一丝分割故障后。
最后堆栈跟踪输出:
[a9203:03910] Signal: Segmentation fault (11)
121 [a9203:03910] Signal code: Address not mapped (1)
122 [a9203:03910] Failing at address: (nil)
123 [a9203:03910] [ 0] /lib64/libc.so.6() [0x36846329a0]
124 [a9203:03910] [ 1] /lib64/libc.so.6() [0x368468e312]
125 [a9203:03910] [ 2] /program(ZNSt10_HashtableIjSt4pairIKjN15BodyProcessInfo5FlagsEESaIS4_ENSt8__detail10_Select1stESt8equal_toIjESt4hashIjENS6_18_Mod _range_hashingENS6_20_Default_ranged_hashENS6_20_Prime_rehash_policyENS6_17_Hashtable_traitsILb0ELb0ELb1EEEE5clearEv+0x3f)
对不起,这是hashed_unique,纠正问题 – Gabriel 2014-10-29 23:24:02
ahhh,谢谢!,堆栈跟踪确实不是来自boost :: multiindex,上帝地狱....我完全错过了这个 – Gabriel 2014-10-29 23:26:13