有时候写代码,难免会忘记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;
这会泄露么?
------解决方案--------------------
这应该会导致运行时错误,因为没有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 单元测试框架,可以用用。