【发布时间】:2017-02-21 16:42:48
【问题描述】:
我正在使用一个继承 QWidget 的对象,为了知道它何时关闭,我使用了setAttribute(Qt::WA_DeleteOnClose),并已连接
connect(myObj,SIGNAL(destroyed(QObject*)),this,SLOT(handleFinish()));
但是,当对象被删除时,我得到munmap_chunk(): invalid pointer,而当我查看指针的地址时,它是myObj的数据成员之一,它确实不是指针。
我动态分配 myObj,所以它应该在堆上 - myObj = new myObj();
错误出现在 myObj 析构函数的末尾,我检查了这是第一次调用析构函数(在查看When setting the WA_DeleteOnClose attribute on a Qt MainWindow, the program crashes when deleting the ui pointer 之后)。
对处理它有什么建议吗?
【问题讨论】:
-
handleFinish()插槽是否被调用?你正在破坏你的记忆。我认为除非您提供MCVE,否则这个问题是无法回答的。尝试通过从析构函数中临时删除语句和/或删除成员数据(在对象被销毁时被破坏)来隔离问题,并观察在注释掉时不会导致崩溃的语句/成员变量。跨度>
标签: c++ qt memory-management qwidget