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...