Bjarne Stroustrup老爷子说过:
“C makes it easy to shoot yourself in the foot; C++ makes it harder, but when you do it blows your whole leg off.”

最近的工程时不时的出现0xC0000005: 读取位置 xxx时发生访问冲突,导致崩溃。

先看看下面的程序:

#include<iostream>
#include <string>int main()
{char * p1 = (char *)malloc(sizeof(char) * 20);char p3[20] = "igkl";char * p2 = "efgh";p1 = "abcd";       //p1指向字符串"abcd"的首地址, 而不是把"abcd"拷贝到malloc开辟的内存块中strcat(p1, p2);   //报错: 0xC0000005异常,访问冲突strcat(p3, p2);   //正确std::cout << p1 << std::endl;std::cout << p2 << std::endl;std::cout << p3 << std::endl;std::cout << p2 << std::endl;//释放内存free(p1);p1 = NULL;return 0;
}

上面的程序在运行的时候就会报错,调试分析:

因为指针变量p1(0x00d7576c)所指向的字符串常量“abcd”后面,也即字符’d’的地址是 0x00d7576c+3=0x00d7576f 。而它后面以地址 0x00d75770 开始的内存块是不属于指针变量p1的,没有访问权限,所以把拷贝自指针变量p2(0x00d75774)指向的字符串“efgh”到以 0x00d75770 为起始地址的内存块中会报错。

如果这样修改:

    char p3[20] = "igkl";char * p1 = (char *)malloc(sizeof(char) * 20);p1 = p3;char * p2 = "efgh";strcat(p1, p2);   //正确strcat(p3, p2);   //正确

可以把语句 p1 = “abcd”; 改成 p1 = p3;,然后直接使用 strcat( p1, p2 );,这样是合法的。

博客C++“读取位置 0x****** 时发生访问冲突”的可能原因
有指出了一种情况:

malloc一个100内存的空间用于读入文件,当文件的大小超过100时,并且程序中再使用100之后的内存时,就会产生“0xC0000005: 读取位置 xxx时发生访问冲突”这样的错误。

还有可能产生的原因:
申请的内存没有释放
new后必须delete
malloc后必须free
创建内核对象(比如CreateFile,CreateMutex,CreateThread),后必须释放内核对象句柄.
创建内存映射文件,CreateFileMapping,MapViewOfFile后必须CloseHandle(),UnMapviewofFile
创建GDI对象后,比如LoadIcon,LoadImage,CreateImageList等等,必须Destroy掉
创建DC后,比如GetDC(), 必须释放DC句柄
保留虚拟地址空间 VirtualAlloc(),然后提交物理存储器后,必须释放掉

出现死循环导致内存泄露

所有的第三方类库存在内存泄露相关的BUG

常见的溢出主要有:
内存分配未成功,却使用了它。
常用解决办法是,在使用内存之前检查指针是否为NULL。如果指针p 是函数的参数,那么在函数的入口处用assert(p!=NULL)进行检查。如果是用malloc 或new 来申请内存,应该用if(p==NULL)或if(p!=NULL)进行防错处理。

内存分配虽然成功,但是尚未初始化就引用它。
内存分配成功并且已经初始化,但操作越过了内存的边界。
例如在使用数组时经常发生下标“多1”或者“少1”的操作。特别是在for 循环语句中,循环次数很容易搞错,导致数组操作越界。

使用free 或delete 释放了内存后,没有将指针设置为NULL。导致产生“野指针”。

程序中的对象调用关系过于复杂,实在难以搞清楚某个对象究竟是否已经释放了内存,此时应该重新设计数据结构,从根本上解决对象管理的混乱局面。

不要忘记为数组和动态内存赋初值。防止将未被初始化的内存作为右值使用。

没有躲过的坑--0xC0000005: 读取位置 xxx时发生访问冲突相关推荐

  1. .dll处位于.exe中引发的异常:0xC0000005:读取位置XXX时发生访问冲突

    .dll处位于.exe中引发的异常:0xC0000005:读取位置XXX时发生访问冲突 在进行c++代码编译时,出现了.dll处位于.exe中引发的异常:0xC0000005:读取位置XXX时发生访问 ...

  2. 异常:0xC0000005: 读取位置 0x00617568 时发生访问冲突。

    0xC0000005: 读取位置 0x00617568 时发生访问冲突. 这个令一个像我这种正在学习的小菜鸟非常崩溃的异常. 对于这个异常,有个大佬总结了一下: 0xC0000005可能出现的原因: ...

  3. 处有未经处理的异常:0xC0000005 : 读取位置 0x00000000 时发生访问冲突。

    转 首先排除一种小概率事件就是系统冲突导致的,比如系统盘目录存在类似的第三方库文件,程序运行将崩溃,并报错0xC0000005 : 读取位置 0x00000000 时发生访问冲突. 上面的意思就是,你 ...

  4. Opencv4测试报错00007FFB3253A9C0 (ntdll.dll)处引发的异常: 0xC0000005: 读取位置 0x0000000000000010 时发生访问冲突

    报错信息如下: 0x00007FFB3253A9C0 (ntdll.dll)处(位于 test1.exe 中)引发的异常: 0xC0000005: 读取位置 0x0000000000000010 时发 ...

  5. MFC程序提示 0xC0000005: 读取位置 0x00000020 时发生访问冲突。

    这个bug困扰我两天了,我在win7下开发的MFC程序,在win7下一只运行良好,放到同事的win10机子上就出问题了,在点击按钮弹出子窗口时必崩,在win7下仔细调试才发现:调用DoModal()后 ...

  6. 0x0F1AFD76 (libcocos2d.dll) (Plane.exe 中)处有未经处理的异常: 0xC0000005: 读取位置 0x00000018 时发生访问冲突。

    0x0F1AFD76 (libcocos2d.dll) (Plane.exe 中)处有未经处理的异常: 0xC0000005: 读取位置 0x00000018 时发生访问冲突. Get data fr ...

  7. (转载)0x0F1AFD76 (libcocos2d.dll) (Plane.exe 中)处有未经处理的异常: 0xC0000005: 读取位置 0x00000018 时发生访问冲突。

    原文地址:http://blog.csdn.net/u010398774/article/details/23567441 0x0F1AFD76 (libcocos2d.dll) (Plane.exe ...

  8. xxx.exe 中的 0x005d93af (sss.dll) 处最可能的异常: 0xC0000005: 读取位置 0x00000000 时发生访问冲突

    问题:xxx.exe 中的 0x005d93af (sss.dll) 处最可能的异常: 0xC0000005: 读取位置 0x00000000 时发生访问冲突? 让人头大! 解决经过: Windows ...

  9. 引发的异常: 0xC0000005: 读取位置 0x0000000000000008 时发生访问冲突

    运行环境:windows10 opencv3.2 virsual studio2015 问题描述:在Debug下调试运行正常,但是在Release模式下报错:0x00007FF8FFA61CE7 (o ...

  10. (xxx.dll)处(位于xxx.exe 中)引发的异常: 0xC0000005: 读取位置 0x0000003F 时发生访问冲突。已解决。

    下面两个这种类型的报错都一样.(跟xxx.dll和xxx.exe都没关系) 0x794CECC1 (Qt5Cored.dll)处(位于 xxx.exe 中)引发的异常: 0xC0000005: 读取位 ...

最新文章

  1. 对移动APP开发的需求分析的观点及见解
  2. pytorch自带网络_【方家之言】一篇长文学懂 pytorch
  3. PIC单片机入门_汇编/混编/C编比较
  4. centos 6.7 ssh免密登录配置
  5. CodeForces - 76E Points
  6. 深入react技术栈(7):组件化实例:Tab栏组件
  7. CSS3最颠覆性的动画效果,基本属性[3D]
  8. java遮罩层_页面遮罩层 - javaalex的个人空间 - OSCHINA - 中文开源技术交流社区
  9. Python 浮点数的内置方法
  10. iOS 史上最详细的app测试或者上架AppStore流程
  11. KubeSphere 3.3.0 离线安装教程
  12. 系统工程新发展——体系
  13. 从达特茅斯会议到图灵奖---人工智能学习分享
  14. luogu P4556 [Vani有约会]雨天的尾巴
  15. 灌篮高手微信登录是什么服务器,灌篮高手微信登录版本
  16. TNS-12547和TNS-12555错误解决
  17. win10文件夹加密_Win10 系统优化软件 Windows 10 Manager v3.2.0
  18. python画气泡图_画气泡图的十二个图表库
  19. 故宫景点功课3:太和殿院落上
  20. 题目7飞机票订票系统

热门文章

  1. ZBrush如何结合数位板雕刻模型
  2. 手机计算机怎样调音乐,手机音乐EQ均衡器调节音效简单小技巧-均衡器设置
  3. JsDroid3插件扩展
  4. linux进阶-PHP加速器
  5. Steam流式传输后插耳机没有声音
  6. UEFI规范实现EDKII项目学习笔记绪论[0]
  7. 电脑录制网课视频怎么操作?
  8. python list 迭代_python迭代、列表生成式
  9. 找同学 字典 11.12
  10. 桔梗载药上浮 柴胡升于左 升麻生于右