本文主要是介绍MFC程序提示 0xC0000005: 读取位置 0x00000020 时发生访问冲突。,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
这个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);//不选上
---------------------
原文:https://blog.csdn.net/zhouxicai/article/details/52862488
这篇关于MFC程序提示 0xC0000005: 读取位置 0x00000020 时发生访问冲突。的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!