VS调试时遇“0xC0000005“问题,先别急去排除内存,看看容易忽略的配置

1 篇文章 0 订阅

VS调试时遇到"0xC0000005:读取位置时发生访问冲突"问题时,先别急去排除内存,看看容易忽略的配置属性。

一、配置属性

1.windows程序:
1)C+±>预处理定义中,删除_CONSOLE, 添加_WINDOWS.
2)链接器->系统,将SubSystem设为Windows(/SUBSYSTEM:WINDOWS)

2.控制台程序:
1)C+±>预处理定义中,删除_WINDOWS, 添加_CONSOLE
2)链接器->系统,将SubSystem设为CONSOLE(/SUBSYSTEM:CONSOLE)
无

产生"0xC0000005"的原因应是程序运行时找不到适当的入口函数。

二、内存问题

1.空指针和野指针的区别
空指针:赋为 NULL 值的指针被称为空指针。
野指针:尚未初始化为任何值(包括NULL)的指针称为野生指针。

2.已释放内存的访问;释放后的指针为什么还可以用?为什么指针释放后要赋NULL?

    int *ss=new int(10);
    delete ss;
    *ss=11;
    cout<<*ss;	//结果为:11

delete只是命令系统把指针指向的堆空间回收,告诉计算机“这块空间没人在用,你可以使用了“,但指针依然指向原来的堆空间,所以delete一个指针后,要立刻把它赋值为nullptr或NULL。

3.内存越界/内存泄漏
1)定义指针的时候未初始化,指针指向的是一个随机内存空间。
2)分配到的内存比实际上使用的内存要小。
3)使用下标访问数组时,下标错误。
详情:链接: C++内存泄漏/内存越界的各种情况,以及预防与排查

三、WINDOWS系统的问题

看这个链接: Windows错误“ 0xc0000005”

还有一种曾经遇到过一次的奇葩情况,重启后能运行成功。个人猜测是指定内存未完全释放,然后该内存被访问,与代码里的内存释放无关。

欢迎在评论区分享遇到的不同情况,能分享解决方案就更好了!

问题描述的是一种被称为"访问冲突"的错误,具体涉及到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、付费专栏及课程。

余额充值