继续之前的项目。跑录像的时候,本地测试为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 的情况和原生代码杂乱也有一定关系