EVC环境下为什么delete对象无法释放内存

yeguohua   2007-3-9 13:06 楼主
我写了一个很简单的程序,窗口上就两个按钮,用于动态分配和释放内存.打开WinCE.net的SystemProperties的Memory选项卡查看内存情况,发现分配可以,但按了释放内存的按钮却不能释放内存,不知原因,望高手指点!

回复评论 (9)

贴代码啊
察看内存分配是否成功也不需要“Memory选项卡查看内存情况”吧?
点赞  2007-3-9 13:54
CMap::CMap()
{

}

CMap::~CMap()
{

}



void CMap::Create(int nLen)
{

        pointsNum=new double[nLen];

}

void CMap::Delete()
{
        delete[] pointsNum;
       
        pointsNum=NULL;
}

在主程序中两个按扭分别调用Create和Delete.
点赞  2007-3-9 15:00
你把两段代码合到一起调试看看 , 如果还是释放不了 , 那就真的奇怪了
点赞  2007-3-12 09:13
我也遇到了这样的问题。
char   **ppBuf   =   0;
TRACEMEM(   _T("before   test   new   &   delete")   );   //跟踪内存变化
ppBuf   =   new   char*[   1024   ];
for   (   int   i   =   0;   i   <   1024;   i++   )
{
ppBuf   =   ::new   char[1024];
strcpy(   ppBuf,   "abcdefg"   );
}

for   (   int   i   =   0;   i   <   1024;   i++   )
{
::delete   ppBuf;
}
delete   ppBuf;
TRACEMEM(   _T("after   test   new   &   delete")   );

上面这段代码会泄漏   1M   内存
无论是否在   new   和   delete   的前面加"::"都会
但是如果是在   new   之后直接   delete   则可以释放掉
比如   
char   *p   =   new   char[   1024   *   1024   ];
delete   p;
p   =   0;
这样就不会有问题。

我现在的解决办法是用一个固定大小的数组,并且是全局或者是类成员的。
比如把   
char   *p   =   new   char[   1024   *   1024   ];
改成
char   g_aBuf[   1024   *   1024   ]   =   {   0   };
点赞  2008-2-1 16:49
应该是释放掉了,只是所谓的Memory选项卡或跟踪内存变化显示不正确
点赞  2008-2-1 20:28

7楼 kly 

把程序退出了呢?会不会看起来释放掉了?
点赞  2008-2-2 10:07
应该删除了吧,估计是内存管理器没有即时更新.
点赞  2008-2-2 18:23
  pointsNum是类成员变量吗
点赞  2008-2-14 09:30
应该是释放掉的,没有及时的刷新而已。
点赞  2008-2-14 09:49
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复