vs2013右键菜单 0xC0000005: 读取位置 0x00000004 时发生访问冲突

本文介绍在VC++6.0环境中创建右键菜单的过程,并解决了因缺少子菜单导致的运行时错误问题。通过修改菜单资源和加载正确的菜单资源ID,成功实现了菜单功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >



孙鑫vc++6.0教程第六课1小时32分左右有个创建右键菜单的教程,照教程录入后会报错,如下

0x10164A91 (mfc120ud.dll) (Menu.exe 中)处的第一机会异常:  0xC0000005:  读取位置 0x00000004 时发生访问冲突。
0x10164A91 (mfc120ud.dll) (Menu.exe 中)处有未经处理的异常:  0xC0000005:  读取位置 0x00000004 时发生访问冲突。


百度了一下之后,没找到解决方法,自己猜测试了一下,原来是子菜单没有。

原来的代码:

	menu.LoadMenu(IDR_MENU1);
	CMenu *pPopup;
	pPopup=menu.GetSubMenu(0);
	ClientToScreen(&point);
	pPopup->TrackPopupMenu(TPM_LEFTALIGN, point.x, point.y, this);

这样会报错

然后改了一下代码:

	menu.LoadMenu(IDR_MAINFRAME);
	CMenu *pPopup;
	pPopup=menu.GetSubMenu(0);
	ClientToScreen(&point);
	pPopup->TrackPopupMenu(TPM_LEFTALIGN, point.x, point.y, this);

发现是自己创建的菜单中没有子项

所以添加子项就可以了

注意弹出菜单的 属性设置:顶层菜单是没有ID的(COMMAND),只有索引(POSITION)

这样就可以了

花了一个多小时,就搞定这么小的知识点。

分享给后来者吧

问题描述的是一种被称为"访问冲突"的错误,具体涉及到Visual Studio 2019(VS2019)中的一个错误代码0xc0000005以及读取位置0x0000000000000000。 错误代码0xc0000005表示"访问冲突",通常是由于程序试图访问一个无效的内存地址而导致的。读取位置0x0000000000000000是指程序尝试读取内存地址0x0000000000000000处的数据,但这个地址通常是无效或未被分配的,因此引发了访问冲突。 出现此错误的原因可能有很多,例如: 1. 空指针引用:在程序中,出现了一个指针变量未初始化或被赋值为NULL,然后尝试通过该指针访问内存。 2. 野指针引用:在程序中,出现了一个已被释放或销毁的指针,然后尝试通过该指针访问内存。 3. 数组越界访问:在程序中,出现了对数组越界的访问,即访问了数组边界之外的元素。 解决此问题的方法可以有多种途径: 1. 检查指针的初始化和使用:确保所有指针变量在使用之前都被正确初始化,并且没有被赋值为NULL。避免使用已被释放或销毁的指针。 2. 检查数组访问:确保所有的数组访问都在数组的有效边界之内。避免数组越界访问。 3. 使用合适的内存管理:在动态内存分配和释放,确保正确地分配和释放内存。避免内存泄漏和指针悬挂。 4. 运行错误检查:在调试模式下,使用调试工具和编译器选项进行运行错误检查,以找出潜在的内存问题。 总之,根据错误代码0xc0000005读取位置0x0000000000000000,我们需要仔细检查和分析代码中涉及到的指针、数组和内存管理等相关操作,以修复访问冲突问题。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值