插入映射(使用自定义比较仿函数)会运行到无效的节点/地址

时间:2015-06-16 18:29:28

标签: c++ stl

我正在调试内存损坏问题,并希望得到一些帮助来找出问题。

我们有一个带有自定义比较器的地图(用于在地图对象之间进行比较的仿函数)。我们有一个将对插入到地图中的函数。 在将条目插入到函数之前,将在函数的开头清除映射。

序列化对地图的访问。

问题在于,在向地图中插入条目时,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);
};

总结如下:

  1. 自定义比较功能用于地图。
  2. 地图插入(RbTree插入)运行到保存地图大小的节点/地址。这是在几次成功插入后发生的。
  3. 序列化对地图的访问。
  4. 这个问题发生了很多次。

0 个答案:

没有答案