VerySource

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 859|回复: 4

动态创建控件出错,谁来帮我???

[复制链接]

2

主题

19

帖子

11.00

积分

新手上路

Rank: 1

积分
11.00
发表于 2020-1-13 14:20:01 | 显示全部楼层 |阅读模式
我的一个程序是基于单文档类型SDI
在主框架通过一个文档模板动态管理和调用两个视
CScrollView 和CRichEditView

切换视时当前加载的视会自动析构

我在CScrollView中使用了一个动态创建的的CEdit* m_pEdit对象
在视中要用时m_pEdit = new CEdit; m_pEdit->Create(..)
不用时或CScrollView析构时delete m_pEdit;m_pEdit = NULL;
不切换视只在CScrollView不断new 和delete不会出错.

问题:
先从CScrollView切换到CRichEditView视时,
通过跟踪,m_pEditCScrollView在已经被delete了
再切换回CScrollView时,在程序代码中用m_pEdit->Create(..)
时报错,跟踪此错误发现是MFC的CEdit类的Create函数出现异常,
在异常对话框点击[忽略],发现此错误不影响程序的正常运行
m_pEidt控件也可正常使用.

这是什么原因,小弟有礼了.
如何避免此异常出现(消除异常提示框都行)
回复

使用道具 举报

0

主题

1

帖子

2.00

积分

新手上路

Rank: 1

积分
2.00
发表于 2020-1-19 11:09:01 | 显示全部楼层
我想你应该是delete对象之前没有销毁窗口,造成对象已经析构而窗口还在,所以发生异常
回复

使用道具 举报

0

主题

36

帖子

22.00

积分

新手上路

Rank: 1

积分
22.00
发表于 2020-1-19 15:18:01 | 显示全部楼层
建议学习使用boost::shared_ptr,只用new, 不用delete
智能指针免除对象管理的烦恼。
www.boost.org/libs/smart_ptr/shared_ptr.htm
回复

使用道具 举报

0

主题

9

帖子

8.00

积分

新手上路

Rank: 1

积分
8.00
发表于 2020-1-19 18:27:02 | 显示全部楼层
切换时
new的对象(CEdit对象)并没有正常释放掉
析构时也许只是析构掉了m_pEdit
当再次切换回来时再次调用m_pEdit->Create(..)
可能会发生this指针错误

用智能指针时个好办法
回复

使用道具 举报

2

主题

19

帖子

11.00

积分

新手上路

Rank: 1

积分
11.00
 楼主| 发表于 2020-8-5 13:30:01 | 显示全部楼层
怪事,我在new以前加入代码view->SendMessageBox(WM_SIZE,0,0);就解决了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|CopyRight © 2008-2023|verysource.com ( 京ICP备17048824号-1 )

快速回复 返回顶部 返回列表