linux关于内存泄露的问题,求解!

zhouweijie686 2015-07-30 11:36:05
在vs中程序运行,发现存在new出来后没有delete,只是把指针重置成了NULL,同时存在内存泄露,利用windows任务管理器查看,发现占用内存会一直增加。
但是该程序通过虚拟机编译成linux版本,通过top监控发现,相同操作并没有内存泄露。这是什么原因,是我监控方式不对,还是linux机制和windows有差异,大神求解!
ps:程序基于QT
...全文
221 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_36264148 2016-09-28
  • 打赏
  • 举报
回复
请问楼主,这个问题搞明白没呢,,,我现在遇到问题有点像,我用QT写了一个简单界面,new QWidget里面添加一些控件,并且delete了,用top查看内存发现delete后内存仍然没减少,Ubuntu虚拟机上
彩阳 2015-08-11
  • 打赏
  • 举报
回复
引用 7 楼 zhouweijie686 的回复:
[quote=引用 6 楼 dext 的回复:] 你 new 的 是什么?
new 的一个新类,类似弹出框[/quote] 如果有用deleteOnClose属性的话,可以排除一部分原因。
未狂 2015-08-06
  • 打赏
  • 举报
回复
我一般new就肯定delete,不管Qt有没有的内存智能管理 一个对象如果反复new和delete,那每次delete之后就给销毁的对象赋值NULL 析构函数的时候再判断对象如果不是NULL,就delete
zhouweijie686 2015-08-04
  • 打赏
  • 举报
回复
引用 6 楼 dext 的回复:
你 new 的 是什么?
new 的一个新类,类似弹出框
jiqiang01234 2015-07-30
  • 打赏
  • 举报
回复
Qt的对象管理机制不知道楼主是否清楚,一般来说,从QObject派生的的对象,如果在new的时候指定了parent,几乎是不需要手动delete的。即使没有从QObject派生,也可以用智能指针来接管内存释放,无需手动delete
dext 2015-07-30
  • 打赏
  • 举报
回复
你 new 的 是什么?
jiqiang01234 2015-07-30
  • 打赏
  • 举报
回复
只需要知道一点:在c/c++中,只要手动挡分配内存后,没有释放,就一定有内存泄露,操作系统是不会管理的。除非整个进程退出,操作系统才会回收所有的内存。
zhouweijie686 2015-07-30
  • 打赏
  • 举报
回复
引用 3 楼 jiqiang01234 的回复:
肯定是泄露了。把对象分配的速度加快,看看linux有没有内存增加。可以用valgrind来跑一遍代码,就知道了
还在下载valgrind,新手,问题有点多,有什么办法可以把分配内存加快?频繁操作?
jiqiang01234 2015-07-30
  • 打赏
  • 举报
回复
肯定是泄露了。把对象分配的速度加快,看看linux有没有内存增加。可以用valgrind来跑一遍代码,就知道了
zhouweijie686 2015-07-30
  • 打赏
  • 举报
回复
引用 1 楼 jiqiang01234 的回复:
Qt的对象管理机制不知道楼主是否清楚,一般来说,从QObject派生的的对象,如果在new的时候指定了parent,几乎是不需要手动delete的。即使没有从QObject派生,也可以用智能指针来接管内存释放,无需手动delete
智能指针这个我知道,但是现在这个程序不是基于智能指针的,用的是普通指针,还有就是现在是在一个大类A中有一个小类B,A不释放的前提下,B new出来后没有用delete 只是将B的指针设置为了NULL,确实内存使用在一直增加。但是到了linux里却没有有这个问题,所以我想问一下是我查询linux内存泄露出了问题还是本身机制上linux和windows有差异。

16,216

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧