VECTOR-BUG

 class A
  {
      
 };
 std::vector<A>  vecArray;
 
 vecArray.push_back(   );
 vecArray.push_back(   );
 vecArray.push_back(   )
 
 A & a= vecArray.back();
 vecArray.push_back(   );

//////////////////////////

藉助valgrind,終於找到一個隱藏很久的bug

以上的代碼驟眼看上去也沒有什麼奇怪的地方,經過多次的測試也沒有發現什麼問題。但昨天bug終於爆發了,程序總是無緣無故down掉。
其實原因很簡單,就是在 A & a = vecArray.back(); 這一步。
vector
是一個會自增長的容器,自增長的結果就是把原來的內存釋放掉,重新分配一個足夠大的內存。既然原來的內存已經釋放掉,那麼a所引用的內存就是一段無效的內存。對無效內存的訪問,後果有多嚴重就不用多說了。

想解決方法也很多,最簡單就是用std::list或者std::deque替代vector

STL裏的容器大部分都是“值”容器,你用“引用”去訪問容器裏的內容,錯了正常。這不是vector的問題,你自己使用的問題。如果基於性能考慮上面的程序一定要使用“引用”語意的話,應該用vector<A*>的寫法才比較正確..STL的容器最好使用指針

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章