如何使Qt GUI应用程序在C没有内存泄漏

前端之家收集整理的这篇文章主要介绍了如何使Qt GUI应用程序在C没有内存泄漏前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我没有能够创建一个没有超过1K的绝对丢失字符的Qt GUI应用程序.我已经尝试了这个,使最小的应用程序只显示一个QWidget,扩展了QMainWindow;它只是创建一个QApplication对象而不显示或不执行它或两者,但它们总是泄漏.

试图想出这一点,我已经看到这是因为X11或glibc有错误,或者因为valgrind提供了错误的肯定.在一个论坛的线程中,似乎暗示在主函数中创建一个QApplication对象,并返回对象的exec() – 函数,就像教程中所做的那样,是一种“简化”的方式来创建GUI(而不一定很好,也许?).

valgrind输出确实提到了libX11和libglibc以及libfontconfig.其余的记忆损失5损失记录发生在???在QLibrary :: setFileNameAndVersion中的libQtCore.so中.

如果有更合适的方式来创建GUI应用程序,甚至阻止其中的一些发生,那是什么?
如果任何valgrind输出只是噪音,我该如何创建一个压制文件来抑制正确的事情?

编辑:谢谢你的意见和答案!
我不担心这几个丢失的kB本身,但是如果我不必过滤几个错误屏幕,但是通常可以从valgrind获取“OK”,那么找到自己的内存泄漏会更容易.如果我要打压警告,我最好知道他们是什么,对吧?
有趣的是看到接受的泄漏可以!

解决方法

大规模多线程功能库(如QT,wxWidgets,X11等)设置单例类型的对象,在进程启动时初始化一次并不常见,然后不要尝试清理当进程关闭时分配.

我可以向你保证,诸如QLibrary :: setFileNameAndVersion()等功能的任何“泄漏”已经被故意留下了. X11 / glibc / fontConfig留下的内存位可能也不是错误.

它可以被看作是不好的编码习惯或礼节,但也可以大大简化某些类型的任务.这些日子的操作系统提供了非常有力的保证,以清理进程在被杀死(优雅或强制)时留下的任何记忆或资源,如果在应用程序期间很可能需要相关的分配,包括关闭程序,以及QT的各种核心组件将有资格 – 那么只要库被加载/初始化,库就可以设置一些内存分配,并允许这些内存无限期地保持一定的性能.除此之外,这允许存储器存在以供可能引用该存储器的任何其他C析构函数使用.

由于这些分配只能设置一次,并且从代码中的一个点开始,不存在有意义的内存泄漏的风险.它只是内存,属于进程,因此在进程被操作系统关闭时被清理.

结论:如果内存泄漏不在你的代码中,并且看起来不会随着时间的推移变得越来越大(而且这些天重要的是兆兆字节),和/或显然是从初始化设置代码只有在您的应用程序中曾经被调用过一次,那么不要担心.这可能是故意的.

猜你在找的C&C++相关文章