免费注册 查看新帖 |

Chinaunix

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

这个程序由于内存泄漏而损失的为什么与理论不一样? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2004-04-16 22:30 |只看该作者 |倒序浏览
  1. class X
  2. { public:
  3. X(){p=new int[2];cout<<"X().";}
  4. ~X(){ddelete []p;cout<<"~X().\n";}
  5. private:
  6. int *p;
  7. };
  8. class Y:public X
  9. {public:
  10. Y(){q=new int[1023];cout<<"Y():T:: q="<<q<<".";}
  11. ~Y(){delete []q;cout<<"~Y().";}
  12. private:
  13. int *q;
  14. };
  15. int main()
  16. {for(int i=0;i<4;i++)
  17. {X* r=new Y;
  18. delete r;
  19. }
  20. return 0;
  21. }
复制代码

输出为:
  1. X(). Y():T:: q=003751c0  ~X().
  2. X(). Y():T:: q=003761e8  ~X().
  3. X(). Y():T:: q=00377210  ~X().
  4. X(). Y():T:: q=00378238  ~X().
复制代码

由于没用虚析构函数,只调用X的析构函数,导致内存泄漏,
理论上应该损失掉(1023*4=)4092个字节,
但是从输出结果看却损失了4136个字节,为什么啊?
其中机器int为4个字节。

论坛徽章:
0
2 [报告]
发表于 2004-04-16 23:34 |只看该作者

这个程序由于内存泄漏而损失的为什么与理论不一样?

搞不懂,太高深了,那位搞明白可可要告诉我!

论坛徽章:
0
3 [报告]
发表于 2004-04-17 00:26 |只看该作者

这个程序由于内存泄漏而损失的为什么与理论不一样?

有可能是内存管理中的字对齐,或者说和划分内存块的最小单位有关,就是你要15个单位的内存,实际上它划分了16个单位, c++我不是很懂.太复杂了.

还有问一下楼主是怎么得到泄漏内存的字节数的?
Aragorn 该用户已被删除
4 [报告]
发表于 2004-04-17 11:36 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
5 [报告]
发表于 2004-04-17 12:13 |只看该作者

这个程序由于内存泄漏而损失的为什么与理论不一样?

对不起,本人输入是有点失误。
现已经改过来了。
我用的是VC++6.0编译器
XP操作系统
256M内存
Aragorn 该用户已被删除
6 [报告]
发表于 2004-04-17 12:36 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
7 [报告]
发表于 2004-04-17 12:52 |只看该作者

这个程序由于内存泄漏而损失的为什么与理论不一样?

原帖由 "Aragorn" 发表:
It is much better after you clarified the code.

Y占用的不只是1023x4字节. Y本身还要用的地方吧. 它有一个
int* q, 还有两个methods, 这不就12个字节了吗? 还有些别的
stupid的东西.

不信你在 X* r=new ..........



好像是这样的
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP