为什么释放htmlview的时候会出异常!

waterbao 2010-09-15 09:47:33
我首先NEW一个HTMLVIEW,然后CREATE后,再程序后来的时候,我想把htmlview 进行DestroyWindow操作,最后DELETE HTMLVIEW指针,但是在DestroyWindow执行以后,delete的时候会出异常,如果把DestroyWindow这条语句去掉,DELETE执行就不会出错,为什么?我怕这样有内存泄漏
...全文
97 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
waterbao 2010-10-10
  • 打赏
  • 举报
回复
请教个问题,CHtmlView导航到一个网页,网页里面的文本输入框控件当获得焦点的时候和失去焦点的时候,CHtmlView里如何能响应到?
向立天 2010-09-16
  • 打赏
  • 举报
回复
你不delete会有内存泄漏么?
销毁窗口的是偶指针应该已经释放了
Eleven 2010-09-16
  • 打赏
  • 举报
回复
直接调用DestroyWindow()应该就可以了
Eleven 2010-09-16
  • 打赏
  • 举报
回复
你的View类手动调用DestroyWindow以后,DestroyWindow会发送WM_DESTROY消息,WM_DESTROY对应的消息处理函数是OnDestroy();DestroyWindow会发送WM_NCDESTROY,WM_NCDESTROY消息对应的消息处理函数是OnNcDestroy,OnNcDestroy最后会掉哟偶那个PostNcDestroy,在CView::PostNcDestroy中唯一的操作就是delete this;可以看到已经删除了this指针,这个时候已经是野指针了,你后面又调用delete this;就出错。如果你是调用delete this;而没有调用后面的DestroyWindow()函数,delete this会导致调用析构函数,CView的析构函数不会调用DestroyWindow
skyfree 2010-09-16
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 waterbao 的回复:]

我的程序,要用到很多HTMLVIEW,都是随着需要生成,随着需要销毁,再说我也要知道为什么这样
[/Quote]

销毁的时候直接delete mfcObject 就好了,析构函数会自动销毁对应的 句柄。
skyfree 2010-09-16
  • 打赏
  • 举报
回复
oyljerry, jameshooo的解决方案也是对的,有很多方法,关键要理解mfc对象和他下面的handle之间的关系
skyfree 2010-09-16
  • 打赏
  • 举报
回复
但是在DestroyWindow执行以后,delete的时候会出异常,

因为: 你delete这个mfc对象的时候,他的析构函数会调用类似DestroyWindow(m_hwnd)这个方法,由于你已经把这个窗口Destory了,当然会出错,一般可能是ASSERT类的错误。

不需要你自己来DestroyWindow! 如果你想这样做, DestroyWindow之后执行 mfcHtmlView->Detach(),然后再Delete就不会出错了。

jameshooo 2010-09-16
  • 打赏
  • 举报
回复
重载PostNcDestroy函数,什么都别做,也别调用基类函数
waterbao 2010-09-16
  • 打赏
  • 举报
回复
是 DestroyWindow 后 ,delete出错
oyljerry 2010-09-15
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 waterbao 的回复:]

我的程序,要用到很多HTMLVIEW,都是随着需要生成,随着需要销毁,再说我也要知道为什么这样
[/Quote]
那DestroyWindow是具体出错的地方...
waterbao 2010-09-15
  • 打赏
  • 举报
回复
我的程序,要用到很多HTMLVIEW,都是随着需要生成,随着需要销毁,再说我也要知道为什么这样
oyljerry 2010-09-15
  • 打赏
  • 举报
回复
那就用CHtmlView的对象做成员变量,然后就可以使用,等程序退出时,自动释放

3,055

社区成员

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

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