CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  C++ 语言

请问这样写会不会造成内存泄露??????

楼主billconan(billconan)2006-08-23 13:45:00 在 C/C++ / C++ 语言 提问

class   A;  
   
  void   function(A   *h)  
  {  
  //   do   nothing   here  
  }  
   
  main()  
  {  
  for(int   i=0;i<10000000000000;i++)  
  {  
  function(new   A());  
  }  
  } 问题点数:20、回复次数:33Top

1 楼sswweett()回复于 2006-08-23 14:03:31 得分 0

应该会的Top

2 楼HappyTree(笨笨·天行健)回复于 2006-08-23 14:05:22 得分 0

会的  
  虽然A中什么都没有,但在vs下类的最小大小为1,也就是说,每new一次都会造成一个字节的内存泄漏。Top

3 楼billconan(billconan)回复于 2006-08-23 14:07:48 得分 0

A   不是什么都没有     我是懒得写   声明一下,说明有个类ATop

4 楼sswweett()回复于 2006-08-23 14:11:17 得分 0

应该在function   a中deleteTop

5 楼rubbish_only(原谅我的丑)回复于 2006-08-23 14:22:02 得分 0

肯定会,因为你new   的对象没有delete,如果你的对象足够大,系统可能在程序结束前就异常推出了。new操作符是在堆中申请对象,需要程序员自身去释放。Top

6 楼hziee_()回复于 2006-08-23 14:33:01 得分 0

当然会。记住不管在哪调用new,都是在堆上分配了内存。Top

7 楼Fshx(C++初探)回复于 2006-08-23 14:48:40 得分 0

内存泄露Top

8 楼OpenHero(开勇)回复于 2006-08-23 14:52:50 得分 0

A的大小为1Top

9 楼robin_yao()回复于 2006-08-23 15:03:17 得分 0

这当然会了。  
  你NEW了,没DELETE啊!Top

10 楼taosiming(浪苍云)回复于 2006-08-23 15:13:36 得分 0

jf!  
  肯定会阿Top

11 楼zsp006()回复于 2006-08-23 15:20:51 得分 0

new和delete必须成对写。Top

12 楼guo0084(alre)回复于 2006-08-23 16:25:48 得分 0

会的Top

13 楼neustrong(小强)回复于 2006-08-23 16:50:43 得分 0

必须的!Top

14 楼OOPhaisky(异化$渴望成功~~)回复于 2006-08-23 16:54:39 得分 0

这样100%内存泄露。  
  void   function(A   *h)  
  {  
  //   do   nothing   here  
  }  
  在函数结尾处,h指针本身的空间(一个指针4bytes)会被释放,但是指针指向的空间不会被释放,所以内存泄露在所难免。Top

15 楼afgkidy(到处转悠找MONEY)回复于 2006-08-23 16:59:58 得分 0

运行下,要是你能运行正常我跟你姓了。Top

16 楼leonhome(腐烂生存)回复于 2006-08-23 17:11:01 得分 0

必然会~~~Top

17 楼youhaodeyi(友好的翼)回复于 2006-08-23 17:17:08 得分 0

会泄漏内存的,在function中进行delete   h;操作Top

18 楼xl5338870(xlix)回复于 2006-08-23 17:45:26 得分 0

内存泄露!  
   
  你把类A占空间弄大一点,运行下面的程序,很快就死。  
   
  class   A   {  
  char   cc[100000];  
  };  
   
  void   f(A*   p)   {   }  
   
  int   main()   {  
      for   (int   i   =   0;   i   <   100000000;   ++i,   f(new   A()));    
       
      return   0;  
  }Top

19 楼wuyazhe(wyz&xyl)回复于 2006-08-23 18:50:20 得分 0

非常明显的泄漏。所以,可以自己写个宏来模拟成vs.net的using  
   
  #define   USING(cls,obj)   cls*   obj   =   new   cls();  
  #define   ENDUSING(obj)   if(obj   !=   NULL)   delete   obj;   obj   =   NULL;  
   
  调用例如:  
  USING(CString,str)  
  {  
  str->Format("%d",10160919);  
  MessageBox(str->GetBuffer(str->GetLength()));  
  }  
  ENDUSING(str)Top

20 楼BenjaminHuang(肥牛阿Ben)回复于 2006-08-23 18:57:56 得分 0

泄Top

21 楼Wolf0403(废人:独活十年~心如刀割)回复于 2006-08-24 03:18:44 得分 0

>>   肯定会,因为你new   的对象没有delete,如果你的对象足够大,系统可能在程序结束前就异常推出了。  
   
  已经不是   DOS   的时代了。。Top

22 楼playmud((猪头流氓)(抵制日货)(热烈庆祝火箭输球))回复于 2006-08-24 08:50:01 得分 0

问题比较深奥,翻翻书去。Top

23 楼fatweier(青)回复于 2006-08-24 08:54:47 得分 0

new并不一定是用在堆上分配内存Top

24 楼besthyq(寻欢醉一场,但愿长醉不愿醒!)回复于 2006-08-24 09:09:04 得分 0

楼上的,那NEW还可以在哪儿分配?Top

25 楼freefishmj()回复于 2006-08-24 09:19:17 得分 0

真是不懂,LZ为什么弄了一个那么大的for循环Top

26 楼recray()回复于 2006-08-24 10:32:51 得分 0

当然会,这样改一下,应该就不会了  
  class   A;  
   
  void   function(A   *h)  
  {  
  //   do   nothing   here;  
  delete   h;  
  }  
   
  main()  
  {  
  for(int   i=0;i<10000000000000;i++)  
  {  
  function(new   A());  
  }  
  }  
  Top

27 楼guo0084(alre)回复于 2006-08-24 10:38:12 得分 0

应该避免这种写法,如果这样调用就不对了。  
  function(new   a[2]);Top

28 楼ttfy1234(我自将心对明月,奈何明月照沟渠!)回复于 2006-08-24 10:55:21 得分 0

有个疑问:不是说程序结束的时候系统(>98)能自动回收资源的吗Top

29 楼zxf501a(峰)回复于 2006-08-24 11:36:49 得分 0

自动是自动啊,但是有的是过一段时间,有的是发现空间不够用就去检查然后回收  
  楼主此类程序据说运行后系统变慢到一定程度后还是能维持运行  
  不过为了系统和程序着想,自己申请了空间应该要负责释放吧,有借有换,再借不难Top

30 楼Dir_J(小菜菜)回复于 2006-08-24 13:11:55 得分 0

早泄了Top

31 楼OnlyHappy(说好不打脸)回复于 2006-08-24 13:13:51 得分 0

一泻千里Top

32 楼iihero(iihero)回复于 2006-08-24 14:08:56 得分 0

of   course.Top

33 楼wei_feihong()回复于 2006-08-27 22:37:06 得分 0

momery   leakTop

相关问题

关键词

得分解答快速导航

  • 帖主:billconan

相关链接

  • C/C++ Blog
  • C/C++类图书
  • C/C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo