当前位置: 代码迷 >> QT开发 >> Qt下有没事儿检测内存泄露的方案
  详细解决方案

Qt下有没事儿检测内存泄露的方案

热度:47   发布时间:2016-04-25 03:48:58.0
Qt下有没什么检测内存泄露的方案?
有时候写代码,难免会忘记delete自己申请的内存

比如这样


int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();

    int *x;  // 一直没释放
    *x = 123;
    
    return a.exec();
}


有没什么相关方案能给开发者提供一些信息,告诉我们哪里有泄露的情况

------解决方案--------------------
valgrind
------解决方案--------------------
int *x;  // 一直没释放
    *x = 123;
这会泄露么?
------解决方案--------------------
引用:
int *x;  // 一直没释放
    *x = 123;
这会泄露么?

这应该会导致运行时错误,因为没有new来申请内存,谈不上泄露
------解决方案--------------------
QT下当对象的父类或间接父类是QObject时,当离开对象的生存期时,QObject会自动回收new出来的内存。
 int *x;  // 一直没释放
    *x = 123;
*x是一个未知的内存,使用1个未知的内存会导致程序出现不可预知的结果。

正确使用应是:
int *x = new int;
*x = 123;

不用时,
应delete x;


------解决方案--------------------
linux 平台没有疑问的使用qt creator 中配置valgrind。
windows 可以搭建远程的valgrind 配合 qt ctreator
------解决方案--------------------
不过Qt提供了 Qtestlib  单元测试框架,可以用用。
  相关解决方案