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

langlanglv 2007-03-09 01:06:57
我写了一个很简单的程序,窗口上就两个按钮,用于动态分配和释放内存.打开WinCE.net的SystemProperties的Memory选项卡查看内存情况,发现分配可以,但按了释放内存的按钮却不能释放内存,不知原因,望高手指点!
...全文
335 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
KevinCEC 2008-02-14
  • 打赏
  • 举报
回复
应该是释放掉的,没有及时的刷新而已。
kakashi0309 2008-02-14
  • 打赏
  • 举报
回复
pointsNum是类成员变量吗
dfpgb 2008-02-02
  • 打赏
  • 举报
回复
把程序退出了呢?会不会看起来释放掉了?
wbczyh 2008-02-02
  • 打赏
  • 举报
回复
应该删除了吧,估计是内存管理器没有即时更新.
91program 2008-02-01
  • 打赏
  • 举报
回复
应该是释放掉了,只是所谓的Memory选项卡或跟踪内存变化显示不正确
Ah 2008-02-01
  • 打赏
  • 举报
回复
我也遇到了这样的问题。
char **ppBuf = 0;
TRACEMEM( _T("before test new & delete") ); //跟踪内存变化
ppBuf = new char*[ 1024 ];
for ( int i = 0; i < 1024; i++ )
{
ppBuf[i] = ::new char[1024];
strcpy( ppBuf[i], "abcdefg" );
}

for ( int i = 0; i < 1024; i++ )
{
::delete ppBuf[i];
}
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 };
YourKing 2007-03-12
  • 打赏
  • 举报
回复
你把两段代码合到一起调试看看 , 如果还是释放不了 , 那就真的奇怪了
langlanglv 2007-03-09
  • 打赏
  • 举报
回复
CMap::CMap()
{

}

CMap::~CMap()
{

}



void CMap::Create(int nLen)
{

pointsNum=new double[nLen];

}

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

pointsNum=NULL;
}

在主程序中两个按扭分别调用Create和Delete.
YourKing 2007-03-09
  • 打赏
  • 举报
回复
贴代码啊
察看内存分配是否成功也不需要“Memory选项卡查看内存情况”吧?

19,502

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 嵌入开发(WinCE)
社区管理员
  • 嵌入开发(WinCE)社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧