在多线程应用程序中读取/编写自定义映射时堆积损坏

时间:2011-12-28 18:34:51

标签: c++ bonjour

我有自定义的地图类

template <class TKey, class TVal> class CLSimpleMap{};


typedef CLSimpleMap<DNSServiceRef/* Descriptor*/,int/*socket*/> ClientSocketMap;                    

我正在使用Bonjour Api枚举Wifi设备。

我有两个帖子

主线程:

  1. 当Bonjour api回调返回套接字和描述符进行处理时,在地图ClientSocketMap中添加Decriptor和Socket。
  2. 我在socket没有要接收的数据时删除条目
  3. 回调处理线程:

    1. 我正在选择检查socket有什么东西,然后按下Bonjour回调。

    2. 我正在使用Crtical部分在ClientSocketMap上执行添加和删除

    3. 但令我惊讶的是,它在回调处理线程上尝试索引描述符ClientSocketMap时显示Heap损坏。

      我不明白,为什么我收到此错误。这是由于线程? 帮我解决问题。

1 个答案:

答案 0 :(得分:0)

在DNSServiceRef实现中检查operator ==() 此类实现基于数组,每次添加新元素时,都会移动一些旧元素。也许你使用旧指针。每次“添加”后,你的指针无效

  

MSDN:添加的每个键和值对都会释放并重新分配映射数组内存,以确保每个数据的数据始终是连续存储的。