greatghost 发表于 2012-4-4 06:41:39

ACE_Message_Block引起内存泄露问题

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
....................

这是为什么?

freeeyes 发表于 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();



greatghost 发表于 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 就可以正确释放的

baisaichen 发表于 2012-4-10 22:36:57

Message_Block mb(30);
mb.release();

好像貌似会发生死锁

steven99ca 发表于 2012-4-14 03:49:27

源代码没问题,不会泄漏。
这个代码无效的,release只对heap,reference。counted
Message_Block mb(30);
mb.release();

nettoobad 发表于 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();
}

sukai 发表于 2012-4-26 17:35:29

关于楼主的代码本身并没有什么错误,也不是ACE的问题..
解决的办法是这样的:
楼主在编译的时候采用了Use Unicode Character Set方式就会出现这种内存泄露的问题,所以在进行ACE的使用的时候尽量的采用Use Multi-Byte Character Set进行工程的编译,这样内存泄露的问题就会解决...
希望对楼主有所帮助:):)

sukai 发表于 2012-4-26 17:37:07

关于楼主的代码本身并没有什么错误,也不是ACE的问题..
解决的办法是这样的:
楼主在编译的时候采用了Use Unicode Character Set方式就会出现这种内存泄露的问题,所以在进行ACE的使用的时候尽量的采用Use Multi-Byte Character Set进行工程的编译,这样内存泄露的问题就会解决...
希望对楼主有所帮助

sukai 发表于 2012-4-26 17:38:07

freeeyes 发表于 2012-4-4 15:11 static/image/common/back.gif
明显是你的指针没有释放,你应该:

版主这里再次进行了delete应该存在问题吧..:lol
页: [1]
查看完整版本: ACE_Message_Block引起内存泄露问题