Qt之Qt::WA_DeleteOnClose详解
来源:互联网 发布:手机网络稳定软件 编辑:程序博客网 时间:2024/05/10 15:02
由Qt::WA_DeleteOnClose造成的野指针问题,在网上搜到的一个求助贴如下
(http://bbs.csdn.net/topics/380182058):
主窗口类QMainWindow的头文件里定义了一个QDialog类的指针:QDialog *dialog;
现有如下函数语句:
if(dialog==null)
{
dialog=new Dialog(this);
dialog->setAttribute(QT::WA_DeleteOnClose,true);
}
dialog.show(),
当我第一次在MainWindow里打开关闭dialog都正常,当我第二次再执行打开操作时候,就产生了内存读取冲突的错
误,MainWindow也自动关闭了,求解,原因和方案,谢谢,本人新手,问题的原因是这样:
dialog->setAttribute(QT::WA_DeleteOnClose,true); //这里被delete之后并没有置NULL,第二次进来直接show就可能出问题了
发现我们的代码查出的问题是一样的,只不过dialog.show()写在另外一个子函数,也就是说指针在一个地方被delete释放了(它所指向的内存空间可以被其他程序申请使用了),没有置为NULL,在另一个地方检查非空后继续调用,这个指针此时虽然不为空,但是它指向的空间可能被别的程序申请去了,意义已经改变。
总结:
使用setAttribute( Qt::WA_DeleteOnClose, true );需要保证在关闭以后不在使用这个指针,因为这个指针是没有办法自动设为NULL,会变为野指针。delete一个指针之后,只是回收指针指向位置的空间,而指针本身的值不变。你需要手工将其赋值为NULL。
- Qt之Qt::WA_DeleteOnClose详解
- Qt 窗口属性简介之Qt::WA_DeleteOnClose
- Qt 窗口属性简介之Qt::WA_DeleteOnClose
- QT setAttribute(Qt::WA_DeleteOnClose)
- QT中WA_DeleteOnClose属性
- Qt 框架_setAttribute(Qt::WA_DeleteOnClose)使用注意
- Qt::WA_DeleteOnClose 造成的野指针问题
- Qt::WA_DeleteOnClose 造成的野指针问题
- Qt::WA_DeleteOnClose造成的野指针问题
- Qt对话框/窗口、模态和非模态、Qt::WA_DeleteOnClose
- Qt之QThread详解
- Qt之Q_OBJECT详解
- Qt之QTableWidget详解
- Qt之QList详解
- QT之模板详解
- Qt Quick 之 PathView 详解
- Qt Quick 之 PathView 详解
- Qt 之QMediaPlayer类详解
- 02、flex布局用法
- 让VS2010支持Windows2000
- 多人开发的基础---组件化编程,仿COM篇 <<转载>>
- LoadRunner 调用Dll完成加密解密
- css sticky footer
- Qt之Qt::WA_DeleteOnClose详解
- 管理系统UI之四:使用全屏沉浸模式(Using Immersive Full-Screen Mode)
- JAVA基础知识
- VS2010/MFC编程入门系列教程
- C++读取MD5
- ionic-移动端web的性能优化开源组件
- oracle - 查看表空间使用率sql
- C++ 引用 VS 指针 区别
- linux内核中,在/drivers/char目录的Kconfig文件中加入自己编写的新驱动,make menuconfig却不显示的问题