GDI+的Image指针的问题

yowen 2009-06-07 02:49:59
1.在类中声明了一个全局变量Image* m_pClientImage;

2.在函数A中使用,由于还要在别的地方用m_pClientImage,所以没有马上delete,而是在函数B中delete
void A()
{
m_pClientImage = new Gdiplus::Bitmap(clientW, clientH);
}

void B()
{
delete m_pClientImage;
}

3.现在发现函数B中的delete根本不起作用,内存不断在增加,证明资源没有释放,想不通

如果这样写,资源马上释放,但为什么跨了一个函数就不行呢,谁知道呀???
void A()
{
m_pClientImage = new Gdiplus::Bitmap(clientW, clientH);
delete m_pClientImage;

}
...全文
73 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
yowen 2009-06-07
  • 打赏
  • 举报
回复
我在认真跟踪了下程序,原来是别的地方出现问题,跨函数delete是无问题,多谢各位!
whoo 2009-06-07
  • 打赏
  • 举报
回复
还要注意一点,a b 不能跨线程。
zoulie 2009-06-07
  • 打赏
  • 举报
回复
同意楼上的,在申请内存之前判断下,如果没有释放先释放掉再申请,
skyxie 2009-06-07
  • 打赏
  • 举报
回复
如果你调用了10次A(),但是只调用了一次B,那就有9次new Gdiplus::Bitmap 泄露了


void A()
{
B();
m_pClientImage = new Gdiplus::Bitmap(clientW, clientH);
}

void B()
{
if (NULL != m_pClientImage)
{
delete m_pClientImage;
m_pClientImage = NULL;
}
}

19,464

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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