加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 05:31:27 所属栏目:百科 来源:网络整理
导读:我没有能够创建一个没有超过1K的绝对丢失字符的Qt GUI应用程序.我已经尝试了这个,使最小的应用程序只显示一个QWidget,扩展了QMainWindow;它只是创建一个QApplication对象而不显示或不执行它或两者,但它们总是泄漏. 试图想出这一点,我已经看到这是因为X11或gl
我没有能够创建一个没有超过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析构函数使用.

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读