程式設計踩坑記錄

2021-10-24 20:19:55 字數 2437 閱讀 1456

1, stl中的一些庫, 比如map, unordered_map, 不要在遍歷迴圈中做刪除erase操作,該操作是乙個undefined operation:

unordered_mapobject.

for(auto item:object)

但可以用迭代器來處理

for(auto iter=object.begin(); iter!= object.end()?

if(item->shoule_be_erazed )

iter = object.erase(iter)

else

iter++;

也可以先統計好需要被erase掉的關鍵字, 然後再統一進行erase操作。

2, 函式返回值是eigen物件時, 即使函式裡沒有return 函式, 也不會報錯, 所以這個地方一定要注意。

3, 函式和變數的命名要讓別人看見函式名就能知道該函式的大概功能。函式前最好寫上功能說明。

4, new出來的物件, 最好在乙個執行緒裡管理。盡量用智慧型指標代替普通指標。

5, 傳參stl變數傳入的實際是指標(類似陣列)還是值?

6, ubuntu電腦自帶記憶體夠的話, 關閉swap空間

7, 當通過key value來訪問std::map, std::unordered_map時, 存在對其進行修改的可能, 所以當該容器定義為const時, 不能如此訪問,而宜用.at來訪問。

8, rosnode kill -a有時不會起到預期的效果, 此時可以用top檢視程序, 然後用kill -9或者pkill -9 強制殺死相關ros程序

9, 多執行緒傳參,不能引用傳入乙個臨時變數, 因為退出函式後,開闢的執行緒單獨執行,傳入的引用引數已經被銷毀了。

10, 在多執行緒的某個執行緒裡執行過程中臨時開闢的多執行緒a,在這個a執行緒裡用opencv顯示會有問題,這時只能把需要現實的取回到該執行緒裡,才能正常顯示。

11, include 檔案順序重新排列,會帶來意想不到的錯誤,所以在.clang-format檔案裡要加上:sortincludes: 『false』

12, 函式裡new 出來 乙個g2o vertex 變數, 使用結束後delete, 退出函式的時候會出現double free的錯誤,這是g2o自備釋放記憶體的功能嗎?

原因 : 這些vertex指標加入到optimizer中之後, 最後會由optimizer來進行釋放。

13,virtual 作用: 對於父類函式(virtual、非virtual),如果有同型函式:

----非virtual函式由指標型別決定呼叫哪個

----virtual函式由指標指向的物件決定呼叫哪個(執行時決定)

14, 函式使用eigen物件作為返回值的時候,即使沒有返回, 編譯程式也不會報錯,此處應該引起注意。

15, 使用auto注意, 有時需要進行值傳遞, 但結果可能是引用傳遞,造成對原值預料之外的修改。 特別是用auto定義乙個eigen物件的時候!

16, 使用指標沒有初始化的指標將發生無法預料的結果,通常,乙個沒有賦值的指標可能指向任意位址,如果此時對指標執行了解除引用(即*pointer)操作,則可能改寫記憶體中的資訊,這可能導致正在引用該記憶體區的程式崩潰,嚴重時,程式將退出,但不會破壞程式本身,沒有初始化的指標,判斷該指標是否有效的時候,將得到指標有效的結果,例如

data* d1;

if(d1)

data* d2 =

nullptr;if

(d2)

17,assert在debug模式下不起作用!!!

18, ros::nodehandle nh 與 ros::nodehandle nh("~")的區別:後者代表私有命名空間,其差異可體現在訂閱話題和獲取param引數上。具體見ros::nodehandle

19, image2 = image1 與 image2 = image1.clone()的區別:

20, std::unordered_map 可以用 tuple做鍵值,但需要自定義hashkey。

#

include

"boost/functional/hash.hpp"

#include

#include

#include

#include

#include

using key = std::tuple<

int,

char

,char

>

;struct

keyhash};

using map = std::unordered_mapint, keyhash>

;int

main()

21, ofstream 執行檔案寫操作,最後不關閉,可能導致寫入內容不全。

22,boost_thread在棧上新建執行緒的問題。

23,記住:子類的初始化列表不能初始化父類或者祖先類的成員。

Python 踩坑記錄

1.浮點數判斷 工作中遇到類似下面邏輯判斷 i 1 while i 1.5 i i 0.1 print i在想象中i應該停止在1.5就不輸出了,但是實際的輸出結果是無限迴圈。這是因為在計算機的邏輯中,浮點數的儲存規則決定了不是所有的浮點數都能準確表示,有些是不準確的,只是無限接近。如0.1轉換為二進...

Java踩坑記錄

1.quartz整合spring框架service層物件注入為null解決方案 jobdetailfactorybean中注入的是乙個cn.itcast.quartz.hellojob實現類的全路徑,底層會反射建立出乙個hellojob的物件,但是該物件不是由spring管理的,所以業務層的物件無法...

SSD踩坑記錄

原github專案位址,借用大神的模型自己訓練ssd 1 error default maxpoolingop only supports nhwc on device type cpu data format nchw 修改為 nhwc 2 關於dataset name 將影象資料轉換為tfrec...