QTreeWidget中添加widget 讓後清除item 引發的異常

問題背景:今天在維護幾個月前的代碼,發現一個詭異的BUG。。

問題描述:在QTreeWidget 中 的一列中 加入一個按鈕 ,在更新數據時,直接調用 clear(),讓後就 引發異常了。按鈕是一個new出來的指針。

問題解決:在clear() 調用之前 先把 按鈕的指針 delete 掉 就可以解決這個問題。

問題總結:在clear()時,要把通過void QTreeWidget::setItemWidget(QTreeWidgetItem * item, int column, QWidget * widget) 加上去的 QWidget 指針 delete掉 (不要忘了置空)

問題反思:出現這個問題其實並不是太關鍵,主要是定位問題出在哪裏了很棘手,沒法快速定位問題。因爲之前寫的代碼,經驗不足,delete後的指針沒有=NULL; 出現異常後,很顯然是指針問題,可以模塊中指針調用的有點複雜(因爲 那個按鈕是在 用戶點擊 treewidget的item 才動態創建,還要動態回收)。導致這個指針不確定是不是野指針導致的問題。最後把所有delete 後全部添加 指針=NULL;然後在創建按鈕是 進行 NULL檢查 差慢慢鎖定問題出在 clear()前 要釋放指針 。 總之 ,釋放內存後 一定要把指針 =NULL ; 幾個月前寫代碼沒有領悟到這點 ,坑啊 !!


現在對內存管理有一定把握了,並且進行了總結 。

C++進階 - 內存管理

發佈了78 篇原創文章 · 獲贊 75 · 訪問量 15萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章