从头再来

STL窗口使用_list

继续之前的项目。跑录像的时候,本地测试为2G内存的机器,效果还行。没有出现挂掉的现象。

但把代码重新编译在外面跑的时候就出现了段错误,double free list_node_base nohook .一类的gdb信息。

后询问大牛,得知应该是list的迭代器失效引起。


经检查,的确如此。。

有一段类似于以下代码

for(i = list.begin(); i !=list.end();i++)
{
   if ( (*) == p)
   {
   }
}

之前有加锁。后来使用了新的加锁方法,、把链表的每一次操作加锁,而不是全部加锁,

也就是list.end(),并不是调用STL的end() 而是先lock 再调再unlock 自己进行了一次类的封装操作。

由于这个影响,导致多线程在判断的时候。有可能会有二个传入的值同时被判断,其中一个over这后顺利进行。另外一个再进行操作。就段错误。

奇怪的是同样二个机器同时测试。就一个出来了错误。。。想来是小错误。很少会碰到。double free 的情况和原生代码杂乱也有一定关系

posted on 2011-06-02 21:25 易宝@byhh 阅读(251) 评论(0)  编辑 收藏 引用


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理