最近在使用Std::list 的时候,程序偶尔会在iterator 进行比较的时候崩溃。Review代码发现iterator的内存为0xcdcdcdcd, 很显然内存地址越界了。所以对Std::list iterator 的初始化和有效性的问题做了一些查找,很可惜没能搜集到多少有用的资料。
Comment: VS2008 下发现0xcdcdcdcd 为m_List.end();
std::list
std::list
1 初始化
1.1 it = m_List.end();
1.2 单独定义一个list
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