std::map 迭代器偏移出错

原创 2007年09月27日 10:00:00
昨天写代码和老大调了一天,查到问题所在但是没有解决,google,baidu均为找到答案

废话不说了 看如下代码
------------------------------
//结构定义
typedef struct _STRU_CUTPICINFO
{
    string strCPURL;//截图的地址
    string strMName;//素材名称
    STRU_CUTPICINFO()
    {
        strMName = "";
        strCPURL = "";
    };
}STRU_CUTPICINFO,*LPSTRU_CUTPICINFO;
typedef std::map<int,STRU_CUTPICINFO>CUTPIC_LIST,*LPCUTPIC_LIST;//int--素材ID

---------------------------------
//填充
CUTPIC_LIST   m_AdCutPicList;
m_MapCs.Lock();
if (AsxMsgInfo.m_AdCutPicList.size() < 3)
{
STRU_CUTPICINFO lCPInfo;
lCPInfo.strCPURL = VideoAdItem.mstrCutPicUrl;
lCPInfo.strMName = VideoAdItem.strItemName;
AsxMsgInfo.m_AdCutPicList.insert(make_pair(liAdID,lCPInfo));
}
m_MapCs.Unlock();

--------------------------------------------------
然后是给控件发送消息
SendMessage(...,...,(WPARAM)(LPVOID)&m_AdCutPicList,...);

---------------------------
收到消息后
CUTPIC_LIST* mpCpList = (CUTPICLIST*)(LPVOID)aParam; //这里aParam是map结构的地址
CUTPIC_LIST::iterator itr = mpCpList->begin();
while(itr != mpCpList->end())
{
int iID= itr->first;
string strURL= itr->second.strCPURL;
string  strName = itr->second.strMName;
++itr;
}

好了,来说说错误的地方,while循环里面,第一轮可以把数据读出来,迭代器自增以后,
发现迭代器指向空位置,内存泄露,查了很多资料,问题没办法解决,
最后把map换成了vector,解决了这个怪异的问题,难道map的iterator使用有某种限制或者规则?
望碰到过这个问题的朋友帮忙看看问题出在哪里

相关文章推荐

模板类中定义std::list::iterator iter容器的迭代器变量的问题

template class HashTable{ public: explicit HashTable(int size=101); bool remove...

js数组的迭代器方法(some、every、forEach、map、filter)

//数组操作之迭代器方法(这些方法可以对数组中的每一个元素运用某个方法) //一、不生成新数组的迭代器方法 //1、forEach方法(接收一个函数作为参数) function squ...

Map迭代器两种遍历方式

/* map接口中没有迭代器,那么该怎么遍历? 1:Set keySet() :获取到所有的键,存储到一个Set集合中,并返回该集合,因为Set有迭代器,                    ...

map和vector的迭代器失效问题(某公司招聘笔试试题)

当删除一个STL容器(比如map, vector)中的某个元素时, 会引起迭代器失效, 所以, 我们务必提高警惕。 某次笔试, 我遇到这样一个题目: 删除map中value为5的倍数的元素。 该题看起...

2016.4.12Python迭代器,函数式编程,map/reduce高阶函数

2016.4.12Python迭代器,函数式编程,map/reduce高阶函数

js数组的迭代器方法(some、every、forEach、map、filter)

//数组操作之迭代器方法(这些方法可以对数组中的每一个元素运用某个方法) //一、不生成新数组的迭代器方法 //1、forEach方法(接收一个函数作为参数) function squ...

map等关联容器 vector等序列容器 如何防止迭代器失效

序列性容器::(vector)   erase迭代器不仅使所有指向被删元素的迭代器失效,而且使被删元素之后的所有迭代器失效,所以不能使用erase(iter++)的方式,但是erase的返回值为下...
  • nxx_168
  • nxx_168
  • 2012年06月17日 13:33
  • 2656

使用map容器及常量迭代器注意的地方

map应该注意的地方   在STL(标准模板库)中经常会碰到要删除容器中部分元素的情况,本人在编程中就经常编写这方面的代码,在编码和测试过程中发现在STL中删除容器有很多陷阱,网上也有不少网友提到...

C++中map的迭代器操作

C++中map的迭代器操作 可以直接插入pair类型,也可以进行直接赋值 pair类型的左边是第一关键字,右边是第二关键字,显然,map是由红黑树封装起来的,所以支持动态维护平衡树,因此,遍历map...
  • NOIAu
  • NOIAu
  • 2017年06月08日 16:30
  • 437
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:std::map 迭代器偏移出错
举报原因:
原因补充:

(最多只允许输入30个字)