学习使用VS2010开发一个VC++对话框程序,重写了OnClose()函数,发现delete一个对象时总是发生异常。

pstr在对话框类中已经定义为CString*类型成员变量。在OnInitDialog()中new一个对象,比如pstr=newCString;然后为消息WM_CLOSE... pstr在对话框类中已经定义为CString* 类型成员变量。在OnInitDialog()中 new一个对象,比如 pstr=new CString; 然后为消息 WM_CLOSE 添加函数 OnClose(),在 OnClose ()中 delete pstr,可以正常执行,但是继续执行CDialogEx::OnClose();时,程序异常。但是在OnOK()和OnCancel()中delete pstr 后,继续执行CDialogEx::OnOK();和CDialogEx::OnCancel();,窗口可以正常关闭,程序不会异常;代码如下:

void CTestDlg::OnBnClickedOk()
{
// TODO: 在此添加控件通知处理程序代码
delete pstr;
CDialogEx::OnOK(); //正常关闭窗口
}

void CTestDlg::OnBnClickedCancel()
{
// TODO: 在此添加控件通知处理程序代码
delete pstr;
CDialogEx::OnCancel(); //正常关闭窗口
}

void CHestDlg::OnClose()
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
delete pstr;
CDialogEx::OnClose(); //这里会发生异常
}
展开
 我来答
百度网友8872feb
2013-05-01
知道答主
回答量:30
采纳率:0%
帮助的人:19.7万
展开全部
我试了一下,在调用OnClose后又调用了OnBnClickedCancel,所以是多次delete的问题,应该在delete时这么写
if(pstr != NULL)
{
delete pstr;
pstr = NULL;
}

(1)点击IDOK按钮退出:先调用OnOK(),然后是OnDestory(),最后是PostNcDestroy()
(2)点击IDCANCEL按钮退出:先调用OnCancel(),然后是OnDestory(),最后是PostNcDestroy()
(3)点击右上角的关闭按钮退出:先OnClose(),然后是OnCancel(),再然后是OnDestory() ,最后是PostNcDestroy()
178752468
2013-05-01 · TA获得超过291个赞
知道小有建树答主
回答量:517
采纳率:0%
帮助的人:396万
展开全部
建议在每处delete pstr;后加上 pstr=NULL; 可能是多次delete。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式