0xC0000005: Access Violation程序关闭时砰一声——指针与内存释放问题

程序关闭时出现了“砰”一声警报,我马上就想到可能指针释放有问题!但这也是最头痛的问题,指针出问题有时不是一两天就能解决的事!但也没办法,时间不多了,只能硬着头皮查!

我先在不设断点的情况下,用调试运行一下程序!一下子杀出了两个地方漏内存(这群臭家伙居然申请了空间,居然忘了释放,代码是我们一个团队写的!)

这下看来我要好好看看各个类的成员指针,发现第二个问题指针申请和释放写的很乱,有些成员指针也没在构造函数里赋NULL,析构函数里也没有对成员指针进行必要的测试和释放!

改完后,运行程序在关闭时还是发出砰一声!可能是我漏查了一两个指针。我不想再把所有指针再看一遍,就在各个类的析构函数加上断点,单步运行程序,走一下程序的结束流程!熟悉的砰一声,程序终止,调试框冒出了一个

“First-chance exception in Voice.exe (KERNEL32.DLL): 0xC0000005: Access Violation.“的错误!

程序终止时的代码:

CDuanDian::~CDuanDian()
{
        delete []bianma;
}

由于bianma为无效指针(可能是已经释放或者从未申请空间),导致指针释放出错!

改为

if( bianma != NULL )

{

        delete []bianma;

        bianma = NULL;

}

运行程序,结束时还是有砰一声!再单步运行,出错代码还是上面的代码,原因一样——试图释放无效指针!

这可能是指针初始化后未赋NULL或成员指针在不是非析构函数中释放时,未将指针赋为NULL!

查找后,发现成员指针在构造函数中没有赋初始值,也没赋NULL!

修改后,运行程序!问题解决!

 

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值