最近又碰到这个问题,说实话有点不长记性了,犯了同样的错误。一般读取位置发生访问冲突都是由于内存泄漏所引起的,但引起内存泄漏的情况非常多,先贴下我出现错误的代码
GetDlgItem(ID_GETIMAGE)->EnableWindow(FALSE);
没错,就这一行。平常习惯使用工具箱中的按钮,然后置灰就像上面的语句一样,什么问题也没有。
但这次我想要置灰菜单栏上的按钮,想当然的就按上面的方法写,ID_GETIMAGE是我菜单栏某按钮的ID。
于是乎就报出标题所示的错误了,调用堆栈一看,发现是上面这行代码出现问题。于是去搜索了一下菜单栏按钮怎么置灰,顺利解决问题。
下面贴上代码
CMenu *menu = GetMenu();
CMenu *submenu = menu->GetSubMenu(0);
submenu->EnableMenuItem(ID_GETIMAGE,MF_DISABLED);
在其他函数的作用域中,再解除置灰。
CMenu *menu = GetMenu();
CMenu *submenu = menu->GetSubMenu(0);
submenu->EnableMenuItem(ID_GETIMAGE,MF_ENABLED);
MF_DISABLED为置灰,MF_ENABLED为解除置灰,不清楚的可以去MSDN查看一下解释。