QTreeWidget中添加widget 让后清除item 引发的异常

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_33775402/article/details/76162533

问题背景:今天在维护几个月前的代码,发现一个诡异的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++进阶 - 内存管理

展开阅读全文

没有更多推荐了,返回首页