昨天写代码和老大调了一天,查到问题所在但是没有解决,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使用有某种限制或者规则?
望碰到过这个问题的朋友帮忙看看问题出在哪里
发表于 @ 2007年09月27日 10:00:00|评论(loading...)|编辑