繼續之前的項目。跑錄像的時候,本地測試為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 的情況和原生代碼雜亂也有一定關系