免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 5029 | 回复: 19
打印 上一主题 下一主题

[C++] 关于内存泄漏 [复制链接]

论坛徽章:
0
跳转到指定楼层
[收藏(0)] [报告]
发表于 2008-11-21 00:20 |只看该作者 |正序浏览
5可用积分
程序里面没有用new
在一个循环里面声明了一个局部对象,程序会往这个局部对象里面塞很多的东西。
但是从程序的运行状况看,循环完成后这个对象好像没有释放内存。
这个局部对象里主要有一些vector 和list组成,这些要手动清空?

论坛徽章:
0
19 [报告]
发表于 2008-11-21 17:08 |只看该作者
原帖由 emacsnw 于 2008-11-21 11:39 发表
内存涨是正常的,刚释放的内存操作系统不会马上收回,影响效率。
要看是否内存泄露还是valgrind跑一下好了。


这个说法才在点子上

论坛徽章:
0
18 [报告]
发表于 2008-11-21 16:59 |只看该作者
原帖由 earl808 于 2008-11-21 09:22 发表
我可以肯定的说没有用new,用了boost的boost::shared_ptr,这个能自动释放吧?我没有用什么系统调用,都是标准的C++程序
因为内存一直在涨啊。。每次循环完后到下次循环,内存都是在涨的,直到最后

你最好给出你的代码,对自己的代码有信心不错,但把代码拿出来大家才好分析

论坛徽章:
0
17 [报告]
发表于 2008-11-21 16:49 |只看该作者
你如果只是调用STL的vector和list之类的,自己的程序中没有使用new,malloc申请内存,是不可能有内存泄露的,不然,谁还敢用stl?

论坛徽章:
0
16 [报告]
发表于 2008-11-21 13:23 |只看该作者
对象的析构函数里面有问题,你调试下,看能正常执行析构不

论坛徽章:
0
15 [报告]
发表于 2008-11-21 11:39 |只看该作者
内存涨是正常的,刚释放的内存操作系统不会马上收回,影响效率。
要看是否内存泄露还是valgrind跑一下好了。

论坛徽章:
0
14 [报告]
发表于 2008-11-21 10:15 |只看该作者
原帖由 yangsf5 于 2008-11-21 08:26 发表

Are u sure?



我看始没看清是在循环中的局部变量。所以 ‘要‘ 这个字有点问题。其它的都还很 sure.

针对循环中的变量,我已经在 4 楼补充了。

论坛徽章:
0
13 [报告]
发表于 2008-11-21 10:05 |只看该作者
原帖由 galaxywar 于 2008-11-21 00:31 发表
但局部对象本身在退出循环之后并不会占用什么内存了, 除非里面存储的指针指向new出来的内存,但那还是得在某个地方new

有一种可能:有些系统调用函数的返回值是malloc出来的,需要手动释放



目前还没有系统调用会干这种事

libc里面倒是有不少

论坛徽章:
0
12 [报告]
发表于 2008-11-21 10:04 |只看该作者

回复 #11 earl808 的帖子

vector和list里面最好还是用标准的指针····

论坛徽章:
0
11 [报告]
发表于 2008-11-21 09:56 |只看该作者
首先注意你的类是不是需要特殊的析构函数~
要是需要请加上····
还有 在循环里面对内存这样不断的创建不断的释放是很浪费时间的。。
建议可以自己重写 new函数建议使用定位new

论坛徽章:
0
10 [报告]
发表于 2008-11-21 09:22 |只看该作者
我可以肯定的说没有用new,用了boost的boost::shared_ptr,这个能自动释放吧?我没有用什么系统调用,都是标准的C++程序
因为内存一直在涨啊。。每次循环完后到下次循环,内存都是在涨的,直到最后

[ 本帖最后由 earl808 于 2008-11-21 09:23 编辑 ]
  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP