Std::list iterator 的初始化和有效性判断

30 篇文章 0 订阅
 

最近在使用Std::list  的时候,程序偶尔会在iterator  进行比较的时候崩溃。Review代码发现iterator的内存为0xcdcdcdcd, 很显然内存地址越界了。所以对Std::list  iterator 的初始化和有效性的问题做了一些查找,很可惜没能搜集到多少有用的资料。

 

Comment: VS2008 下发现0xcdcdcdcd 为m_List.end();

 

std::list<CMyData *>::iterator it;

std::list<CMyData *> m_List;

 

1 初始化

1.1 it = m_List.end();

1.2  单独定义一个list <CMyData*>     sNull;
it=sNull.end();


2 有效性判断

这个问题比较麻烦,至今没有找到满意的方法。

 

2.1 对赋值后的

If(I t == m_List.end())

If(I t == sNull.end())

 

2.2 VS2005, 2008

判断   (it._Mycont   ==   sNull.end()._Mycont)即可,
如果(   it._Mycont   ==   sNull.end()._Mycont   )是真的话,表示it处于初始状态。

 

3 注意事项

3.1 尽量保证所比较的元素为iterator指向单个list中的元素;

3.2

3.2.1  Use   (your   list).end()   to   represent   an   invalid   iterator   into   your   list (1.1中所述);
3.2.2  Wrap   your   iterator   in   something   like   boost::optional
3.2.3  Use   an   additional   bool   variable   to   indicate   the   validity   of   your   iterator

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值