zoukankan      html  css  js  c++  java
  • Qt::WA_DeleteOnClose 造成的野指针问题

    今天遇到了一个由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,会变为野指针。

    转自:http://blog.csdn.net/zzwdkxx/article/details/50748429

  • 相关阅读:
    openssl用法详解
    单例模式
    __new__静态方法
    django自带加密模块的使用
    celery 框架
    理解RESTful架构
    [Swoole] 在Ubuntu下安装、快速开始
    [Javascript] 动态隐藏和显示 Layui 数据表格的列
    [PHP] CURL获取cookie,模拟登录获取数据
    [Python] 命令行模式阅读博客园的博文
  • 原文地址:https://www.cnblogs.com/liushui-sky/p/5852374.html
Copyright © 2011-2022 走看看