這個問題出的有點兒怪(之前都運行的好好的,畫了兩天圖,再來跑這個程式竟然就掛了
)........一天了也沒個頭緒,欲哭無淚呀!就死在map賦值那里,=運算子map里自帶的呀!為啥會錯?為啥operator=()還要調clear()?一呼叫clear()就會掛,有遇到類似情況的大俠嗎?請給指條明路
。


uj5u.com熱心網友回復:
快來個大俠給指條路吧!
uj5u.com熱心網友回復:
崩潰的時候在彈出的對話框按相應按鈕進入除錯,按Alt+7鍵查看Call Stack即“呼叫堆疊”里面從上到下列出的對應從里層到外層的函式呼叫歷史。雙擊某一行可將游標定位到此次呼叫的源代碼或匯編指令處,看不懂時雙擊下一行,直到能看懂為止。uj5u.com熱心網友回復:

給這點資訊就想把問題解決了?
什么型別?這個變數有哪些相關的操作?
uj5u.com熱心網友回復:
變數型別如下:
std::map<int, AgvStatusType> map_agv_status_;
AgvStatusType 就是個結構體類,一個建構式把所有成員初始化,然后就沒有其他的成員函式了。
uj5u.com熱心網友回復:
AgvStatusType 的成員都是基本資料型別,沒有動態記憶體分配。uj5u.com熱心網友回復:
如果是這樣,那肯定有其他的操作導致這兒崩潰了。這幾句代碼肯定定位不出問題。
也沒問題
uj5u.com熱心網友回復:
謝謝,幫忙分析!
我不明白為啥=賦值時去呼叫clear(),之后會去調erase(),然后就崩潰了,因為root()取到的頭節點指標為null,但是為啥是空?既然是size為0的為空也是很正常的不是嗎?那為啥會崩潰掉
難道要先給map分配足夠大空間嗎?不科學呀!operator=不就是給它賦值的嗎?
uj5u.com熱心網友回復:
如果是這樣,那肯定有其他的操作導致這兒崩潰了。
這幾句代碼肯定定位不出問題。
也沒問題
AgvStatusType 的成員都是基本資料型別,沒有動態記憶體分配。
如果不是這里的問題,我應該從哪個方向去找問題的原因呢?
uj5u.com熱心網友回復:
如果是這樣,那肯定有其他的操作導致這兒崩潰了。
這幾句代碼肯定定位不出問題。
也沒問題
AgvStatusType 的成員都是基本資料型別,沒有動態記憶體分配。
如果不是這里的問題,我應該從哪個方向去找問題的原因呢?
查看這個變數相關的操作。
如果確認都沒有問題。把這個變數相關的操作都注釋掉,看看是不是就不崩潰了。
如果還崩潰,那就說明是有一些其他的操作導致了這個問題。
一點一點屏蔽,一點一點定位吧。
uj5u.com熱心網友回復:
看見了一個mutex。uj5u.com熱心網友回復:
重新編譯,如果不行再看看是否有跨動態庫之類的,請確保位元組對齊數是一致的。uj5u.com熱心網友回復:
那個GetListInfo是個啥?uj5u.com熱心網友回復:
我的這個問題解決了。咱倆的報錯是相同的。我是因為多執行緒導致。
我在兩個執行緒中使用了一個公共的map變數,一個執行緒A中不斷的清除并重新賦值此公共mapA變數,另一個執行緒B不斷的將此公共mapA變數賦值給另一個臨時mapTmp變數。然后在某些時候,會在將mapA變數賦值給mapTmp變數時報錯。
對兩個執行緒加鎖以后問題解決。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/80184.html
標籤:C++ 語言
上一篇:visual studio 2010無法啟動程式,系統找不到指定的檔案
下一篇:Qt5串口通信穩定嗎
