找回密码
 用户注册

QQ登录

只需一步,快速开始

查看: 6641|回复: 8

ACE_Message_Block引起内存泄露问题

[复制链接]
发表于 2012-4-4 06:41:39 | 显示全部楼层 |阅读模式
ACE_Message_Block *mb = new ACE_Message_Block (30);
ACE_OS::sprintf(mb->wr_ptr(),"%s","hello");
ACE_OS::printf("%s\n",mb->rd_ptr ());       
mb->release();
运行后输出窗口显示

Object dump complete.
Detected memory leaks!
Dumping objects ->
{576} normal block at 0x01A5C828, 8 bytes long.
Data: <        > E0 C7 A5 01 CD CD CD CD
{575} normal block at 0x01A5C7E0, 8 bytes long.
Data: <(      Z> 28 C8 A5 01 20 E7 D3 5A
....................

这是为什么?
发表于 2012-4-4 15:11:07 | 显示全部楼层
本帖最后由 freeeyes 于 2012-4-4 15:12 编辑

明显是你的指针没有释放,你应该:

ACE_Message_Block *mb = new ACE_Message_Block (30);
ACE_OS::sprintf(mb->wr_ptr(),"%s","hello");
ACE_OS::printf("%s\n",mb->rd_ptr ());        
mb->release();
delete mb;

或者
Message_Block mb(30);
ACE_OS::sprintf(mb.wr_ptr(),"%s","hello");
ACE_OS::printf("%s\n",mb.rd_ptr ());        
mb.release();


 楼主| 发表于 2012-4-7 12:01:54 | 显示全部楼层
前面的大侠,加上 delete mb ,会引起
Unhandled exception at 0x00c715de in testace.exe: 0xC0000005: Access violation reading location 0xfeeefeee.
就是访问了无效的指针啊,很明显 调用release后,mb已经被释放了
参考ACE文档,说release 就可以正确释放的
发表于 2012-4-10 22:36:57 | 显示全部楼层
Message_Block mb(30);
mb.release();

好像貌似会发生死锁
发表于 2012-4-14 03:49:27 | 显示全部楼层
源代码没问题,不会泄漏。
这个代码无效的,release只对heap,reference。counted
Message_Block mb(30);
mb.release();
发表于 2012-4-26 00:23:31 | 显示全部楼层
1-5楼的同学好像昏头吧。

char* tmpcstr ="hello";
ACE_Message_Block *mb = 0;
ACE_NEW_RETURN(mb,ACE_Message_Block(stlen(tmpcstr)+1),-1);
if  (mb)
{
      mb->copy(tmpcstr);
      ACE_OS::printf("%s\n",mb->rd_ptr ());
      mb->release();
}
发表于 2012-4-26 17:35:29 | 显示全部楼层
关于楼主的代码本身并没有什么错误,也不是ACE的问题..
解决的办法是这样的:
楼主在编译的时候采用了Use Unicode Character Set方式就会出现这种内存泄露的问题,所以在进行ACE的使用的时候尽量的采用Use Multi-Byte Character Set进行工程的编译,这样内存泄露的问题就会解决...
希望对楼主有所帮助:):)
发表于 2012-4-26 17:37:07 | 显示全部楼层
关于楼主的代码本身并没有什么错误,也不是ACE的问题..
解决的办法是这样的:
楼主在编译的时候采用了Use Unicode Character Set方式就会出现这种内存泄露的问题,所以在进行ACE的使用的时候尽量的采用Use Multi-Byte Character Set进行工程的编译,这样内存泄露的问题就会解决...
希望对楼主有所帮助
发表于 2012-4-26 17:38:07 | 显示全部楼层
freeeyes 发表于 2012-4-4 15:11
明显是你的指针没有释放,你应该:

版主这里再次进行了delete应该存在问题吧..:lol
您需要登录后才可以回帖 登录 | 用户注册

本版积分规则

Archiver|手机版|小黑屋|ACE Developer ( 京ICP备06055248号 )

GMT+8, 2024-11-21 21:30 , Processed in 0.021082 second(s), 5 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表