非模态对话框的销毁问题

littlefangMFC 2009-03-25 09:23:11
我在主程序中NEW了一个给模态的对话框,并让其显示,在非模态对话框中new了一个CPictureView(我自己从CView派生的类)的对象m_PictureView,并把它嵌入对话框中,最后重载了非模态对话框的PostNcDestroy()函数,在该函数中delete this、delete m_PictureView,当我关闭程序时,程序执行到delete m_PictureView时就会出错,如果不加这句话就不会错,请问为什么?
...全文
156 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
#Page# 2009-03-26
  • 打赏
  • 举报
回复
在主窗口delete就行了,无需在子窗口多做事情!
littlefangMFC 2009-03-26
  • 打赏
  • 举报
回复
谢谢大家,昨天晚上做了一个测试,发现11楼满天星的说法是正确的。
因为cview类属于可自动销毁的窗口,其PostNcDestroy()函数本身就含有delete this代码,所以当我关闭主程序,最先得到执行的是CPictureView类的PosNcDestroy()函数,这时它已经销毁了自己,然后执行的时其父窗口即对话框的PostNcDestroy()函数,此时m_PictureView对象已经被delete掉了,再delete一次必然会引起错误。
谢谢大家的帮助...
bluebee2009 2009-03-26
  • 打赏
  • 举报
回复
响应对话框的WM_DESTROY消息,在处理函数中delete m_PictureView。
需要特别注意的一点时,使用向导生成的处理函数OnDestroy会先调用父类的OnDestroy,然后在下面让你增加代码。你需要在此函数的最前面做处理,最后再调用父类的OnDestroy。
oyljerry 2009-03-25
  • 打赏
  • 举报
回复
view属于对话框,先delete view,然后delete this
levelmouse 2009-03-25
  • 打赏
  • 举报
回复
先销毁CPictureView,再销毁对话框
另外销毁前做下判断
  • 打赏
  • 举报
回复
先调用一下 m_PictureView 的 DistroyWindow
wqvbjhc 2009-03-25
  • 打赏
  • 举报
回复
delete m_PictureView,delete this换个顺序
lwx300 2009-03-25
  • 打赏
  • 举报
回复
试试将 delete m_PictureView 放到对话框的 WM_DESTROY 中调用。或试试在 CPictureView 类的 PostNcDestroy 中 delete this。
sys0009 2009-03-25
  • 打赏
  • 举报
回复
在delete前判断下m_PictrueView的窗口是否还有效先。

把delete操作放到对话框的析够函数里试试
cnzdgs 2009-03-25
  • 打赏
  • 举报
回复
CView类会在PostNcDestroy函数中delete this,不需要自己处理,如果要自己处理,就不要调用基类的PostNcDestroy函数了。
Fireway2008 2009-03-25
  • 打赏
  • 举报
回复
[Quote=引用楼主 littlefangMFC 的帖子:]
当我关闭程序时,程序执行到delete m_PictureView时就会出错,如果不加这句话就不会错,请问为什么?
[/Quote]

请仔细检查看看,有可能在某个地方你 用另外一个指针p访问了m_PictureView 所指的空间,之后执行了delete p

这样m_PictureView所指定的区域就相当于已经被释放了。
  • 打赏
  • 举报
回复
m_PictureView对象是否还有效
jcsnwpu 2009-03-25
  • 打赏
  • 举报
回复
应该是哪条语句之前已经删除了m_PictureView,你再查查
littlefangMFC 2009-03-25
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 wqvbjhc 的回复:]
delete m_PictureView,delete this换个顺序
[/Quote]不管用的

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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