我是靠谱客的博主 魁梧朋友,最近开发中收集的这篇文章主要介绍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!

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

 

 

最后

以上就是魁梧朋友为你收集整理的0xC0000005: Access Violation程序关闭时砰一声——指针与内存释放问题的全部内容,希望文章能够帮你解决0xC0000005: Access Violation程序关闭时砰一声——指针与内存释放问题所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(61)

评论列表共有 0 条评论

立即
投稿
返回
顶部