STL ---vector iterator not dereferencable错误

来源:互联网 发布:网络直播热点事件 编辑:程序博客网 时间:2024/05/26 12:58

在很庞大的有杂乱的工程中

 

遇到了这种错误,其实并没有必要头疼

 

通常都是因为对容器(vector)的访问越界

 

例如下面的例子可以将隐蔽的错误揭露的很好

 

//   vecTest defined already

 

//   iterTest defined too

 

//  and iterTest = vecTest.begin();

while(*iterTest!= '$')

    vector.erase(iter);

if(*iter=='*')

...

...

 

从上边的简单程序可以看出是对容器的内容查看然后删除部分

 

 

在进行判断是否与指定字符匹配

 

但是有潜在的问题就是如果字符一直未找到

 

则迭代器将会指向容器末端

 

此后的操作将导致越界

 

 

同时上面的while循环判断也非常不合理

 

至少应写成while(iterTest!=vecTest.end()&&*iterTest!='$')

 

然后在if的前面仍旧要检查是否为容器末端

 

if(iterTest != vecTest.end())

{

      if(*iterTest == '*')

             {

                  ...

                  ...

              }

}