lzy's notes

lzy的代码人生

std::map 迭代器偏移出错

昨天写代码和老大调了一天,查到问题所在但是没有解决,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使用有某种限制或者规则?
望碰到过这个问题的朋友帮忙看看问题出在哪里
阅读更多
个人分类: 开发随笔
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭