我正在调试内存损坏问题,并希望得到一些帮助来找出问题。
我们有一个带有自定义比较器的地图(用于在地图对象之间进行比较的仿函数)。我们有一个将对插入到地图中的函数。 在将条目插入到函数之前,将在函数的开头清除映射。
序列化对地图的访问。
问题在于,在向地图中插入条目时,insert(c ++ stl insert)函数会使用无效对象调用compare函数。对象的地址指向地图的大小(存储地图大小的内存区域)。 我想,不知何故,Rbtree插入在Rbtree中找到了这个地址。当获得该对时,我们发现其无效和恐慌。
此代码执行了很多次,但腐败本身只出现了几次。
我检查过代码已序列化。我不确定我使用自定义比较功能的方式是否存在问题。
以下是我使用地图的方式
map<K, V, CmpObj> *map_obj
map_obj = new map<K, V, CmpObj>(list); // List of keys/criteria to sort map objects
class CmpObj {
list<KeyCriteria*> sort_klist_;
public:
CmpObj(list<KeyCriteria*> sort_klist)
{
sort_klist_ = sort_klist;
}
bool operator() (const K& k1, const K& k2);
};
总结如下: