我写了一个很简单的程序,窗口上就两个按钮,用于动态分配和释放内存.打开WinCE.net的SystemProperties的Memory选项卡查看内存情况,发现分配可以,但按了释放内存的按钮却不能释放内存,不知原因,望高手指点!
贴代码啊
察看内存分配是否成功也不需要“Memory选项卡查看内存情况”吧?
CMap::CMap()
{
}
CMap::~CMap()
{
}
void CMap::Create(int nLen)
{
pointsNum=new double[nLen];
}
void CMap::Delete()
{
delete[] pointsNum;
pointsNum=NULL;
}
在主程序中两个按扭分别调用Create和Delete.
你把两段代码合到一起调试看看 , 如果还是释放不了 , 那就真的奇怪了
我也遇到了这样的问题。
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 };
应该是释放掉了,只是所谓的Memory选项卡或跟踪内存变化显示不正确