C/C++ error/exception throw: access violation reading location 0x....;

【问题背景】问题现象如下图:

【问题分析】这类问题,概括的说对基本由于指针未正确使用(申请或者释放过程中产生问题)而导致。

[01]像我产生这个错误时,看自己的代码哪里都好的,检查的检查了,异常的处理了,释放更不会不置nullptr(这种错误基本的错误不可不考虑到),然后我的错误的产生是这样:重定义一个指针变量,VS2015竟然没直接提示错误(因为自己重来不会去想自己不小心重定义了一下变量,有时要写比较多的代码时,你cp一下以前的代码或者 别的人可重构部分的代码,这种情况下别人定义的地方是一个main函数(在定义文件中声明),而你想写在自己定义的某个类中(在头文件声明),于是你cp时,别人的在main中声明,你直接cp过来,应该去掉声明部分,但你没去掉,这样在释放时,就会出现上面的问题)。

【小结】:

概括的说:由于指针未正确使用(申请或者释放过程中产生问题)而导致。

具体的说:(1)重定义一个指针,这样在释放时会产生上面的错误 。(2) 越界访问(一般是都跟数组有关);(3)new及delete时(基本上概括的说法);(4)声明指针后,没有初始化,然后就在释放函数中释放了此指针变量,也会出现上面这种现象,现象如下图.(如果你编写UI的应该程序,当你打开后,不想用它操作什么于是你就关闭UI了即关闭了应该程序,此过程指针被声明,并在析构函数中被释放)。不过也基本是这些了。难道还有什么花式作死的招式嘛,哈 !~~

如果你写在类中,在头文件中声明,在定义文件的析函数中释放,编译一点问题都 没有,而这点细小的过失,有时你很难找得出来的,可能会困惑有些人几天,当然也有大佬 一下就找到,甚至不会出现这种过失,不过,哪个敢说自己没有失手的时候呢,养成好习惯吧!如果你写在一起,如上图,编译都不通过。指针好危险,但也很有用!C++的虚函数本质是指针。

【建议】

在声明指针时一定要马上定义它。如果你可能没马上用它,那么请定义成nullptr,这样减少潜在的隐患。还有要养成一个习惯,在使用指针时,一定要先确定它是否是合法的,释放时,一定要确定它是否已经定义了,因为释放一个声明的指针,一般会出现error:access violation 。

【别人的遇到的】(现在问题时,找问题过程中发现的,感觉可以)

https://blog.csdn.net/michealmeng555/article/details/6452697?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值