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使用有某种限制或者规则?
望碰到过这个问题的朋友帮忙看看问题出在哪里

C++ std::advance给迭代器增加指定偏移量

template void advance (InputIterator& it, Distance n);迭代器辅助函数。 使迭代器it偏移n,其中n为整数。#include //...
  • haohaibo031113
  • haohaibo031113
  • 2017年05月30日 21:43
  • 360

std::advance 给迭代器增加指定偏移量

template < class InputIterator, class Distance > void advance (InputIterator& it, Distance n); ...
  • yockie
  • yockie
  • 2015年06月16日 19:34
  • 2458

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

template class HashTable{ public: explicit HashTable(int size=101); bool remove...
  • acidgl8757
  • acidgl8757
  • 2013年12月14日 12:13
  • 3488

【STL】 map、hash_map、迭代器

1. hash_map和map的区别在哪里? 构造函数。hash_map需要hash函数,等于函数;map只需要比较函数(小于函数). 存储结构。hash_map采用hash表存储,map一般采用红黑...
  • wangwenwen
  • wangwenwen
  • 2011年10月23日 22:59
  • 6358

突然发现std::map的迭代器是有序遍历的

直会用到map的迭代器用来遍历元素,用久了也就没忽略了他的另一个性质,它是有序遍历的,哈哈。...
  • oracleot
  • oracleot
  • 2010年07月14日 10:47
  • 5914

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

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

C++ map迭代器的基本操作和使用

1、map简介 map是一类关联式容器。它的特点是增加和删除节点对迭代器的影响很小,除了那个操作节点,对其他的节点都没有什么影响。对于迭代器来说,可以修改实值,而不能修改key。 2、ma...
  • cyangc
  • cyangc
  • 2014年04月14日 14:14
  • 9345

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

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

map和set关联容器迭代器失效的问题

STL map和set的使用虽不复杂,但也有一些不易理解的地方,如:      为何map和set的插入删除效率比用其他序列容器高?     为何每次insert之后,以前保存的itera...
  • xhu_eternalcc
  • xhu_eternalcc
  • 2014年07月26日 12:01
  • 1015

STL 之双向迭代器

目录 作用:既可以向后访问元素
  • haifengzhilian
  • haifengzhilian
  • 2014年04月13日 12:36
  • 1960
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:std::map 迭代器偏移出错
举报原因:
原因补充:

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