关闭

std::map 迭代器偏移出错

标签: iteratorstringlistvectorstructpair
1971人阅读 评论(3) 收藏 举报
分类:
昨天写代码和老大调了一天,查到问题所在但是没有解决,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使用有某种限制或者规则?
望碰到过这个问题的朋友帮忙看看问题出在哪里
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:178493次
    • 积分:1203
    • 等级:
    • 排名:千里之外
    • 原创:17篇
    • 转载:31篇
    • 译文:0篇
    • 评论:9条
    文章分类
    最新评论