MFC程序提示 0xC0000005: 读取位置 0x00000020 时发生访问冲突。

来源:互联网 发布:python rfm模型 编辑:程序博客网 时间:2024/05/18 01:08

这个bug困扰我两天了,我在win7下开发的MFC程序,在win7下一只运行良好,放到同事的win10机子上就出问题了,在点击按钮弹出子窗口时必崩,在win7下仔细调试才发现:调用DoModal()后 ,会输出“ 0xC0000005: 读取位置 0x00000020 时发生访问冲突 ” 但程序没有崩溃,win10则是直接报错崩溃。上网百度,类似问题的也不少,但是没有固定的解决方案,分析可能原因是使用空指针导致程序崩溃。没办法就用排查法,一段一段检查问题,最后发现是ON_WM_SIZE消息中调用初始化函数出的问题,在DoModal()后自动触发ON_WM_SIZE消息事件,其中有未判断就使用的指针调用,:

((CButton *)GetDlgItem(IDC_RADIO_ALL_PLAYER))->SetCheck(TRUE);//选上((CButton *)GetDlgItem(IDC_RADIO_NEW_PLAYER))->SetCheck(FALSE);//不选上

改成这样调试发现果然是指针的问题,直接跳过,没有报错!

if (GetDlgItem(IDC_RADIO_ALL_PLAYER))((CButton *)GetDlgItem(IDC_RADIO_ALL_PLAYER))->SetCheck(TRUE);//选上if (GetDlgItem(IDC_RADIO_NEW_PLAYER))((CButton *)GetDlgItem(IDC_RADIO_NEW_PLAYER))->SetCheck(FALSE);//不选上



0 0
原创粉丝点击