近日在调试C++程序中new class 后delete 出现如下错误:
* 0x0000007ff64426f87e(ucrtbased.dll)处(处于dataa.exe中)引发的异常:0xC0000005:读取位置(0xffffffffffffffff)时发生访问冲突。*

bimage *metric=new bimage(image);
xxxx
xxxx
delete metric;bimage定义:
class bimage{pubic:bimage();bimage(bimage*image){allocate_buf();variable assignment;};~bimage();
private:int xx;uinit32 *buf[4]; //uint32 **p_buf[4];bool allocate_buf(){buf[0]=new uint32[w*h];p_buf[0]=new uint32*[h];}
}

因为只用到一个通道,故allocate_buf中只对buf[0] 和p_buf[0]分配了空间。
百度了一下delete出错的可能性之后,有帖子说
“初始化什么也没做,并没有指向一块分配的好内存”,我猜想这可能是出错的原因,故改写allocate_buf

    bool allocate_buf(){buf[0]=new uint32[w*h];p_buf[0]=new uint32*[h];buf[1]=buf[0];buf[2]=buf[0];buf[3]=buf[0];p_buf[1]=p_buf[0];p_buf[2]=p_buf[0];p_buf[3]=p_buf[0];}

运行后出现
0x0000007ff64426f87e(ucrtbased.dll)处(处于dataa.exe中)引发的异常:0xC0000005:读取位置(0x00321554ddc0e8)时发生访问冲突。
好家伙,果然跟未赋值有关。但是依然有访问错误,继续百度,找到一篇:
”不能重复delete“
buf[1]=buf[0];指针赋值,delete时明细会删除两次啊。再改,赋值为NULL总可以吧

    bool allocate_buf(){buf[0]=new uint32[w*h];p_buf[0]=new uint32*[h];buf[1]=NULL;buf[2]=NULL;buf[3]=NULL;p_buf[1]=NULL;p_buf[2]=NULL;p_buf[3]=NULL;}
总算顺利通过运行。填坑完毕。

参考https://blog.csdn.net/tianxia_taiping/article/details/10928927 总结一下Delete 中的坑
Delete出错原因分析:
1.数组首地址被无意更改。例如:int A[10]; A++;
2.作用域不同。例如:在函数A中new的内存 int p = new int;在函数B中delete p,此时函数B不认识标识符p。
3.重复delete。例如:在dll的外部对dll的资源进行delete,有可能dll内部自己做了delete操作,此时会重复delete。
4.new的指针指向不定,未初始化,delete时出错。
5.内存越界。这是最常见的,new的空间太少,使用时超出范围,更改了不属于程序自己的地址上的值。如果更改的地址是系统关键区域,程序会马上崩溃;如果是一般的地址,系统不会马上检测出来,这样就埋了一个bug。
例如:VC分配内存时,除了本身的数据空间外,还会分配额外的管理内存。例如在所分配内存的前后会放置边界标识符0xfdfdfdfd。若越界操作,改变了边界外的值,破坏了管理内存,delete时会失败或卡死。如图所示:0xfdfdfdfd为边界标识符,0xcd 0xcd 0xcd为分配的内存,堆区分配的内存未初始化时,VC填充0xcd。前面的0x00000003为分配的内存大小,0x00000001为内存分配目的,0x000000ab为分配的内存编号

解决方法:
1.当传入的形参是数组时,能加const的就加const,防止在函数内部中的意外操作。
2.内存new和delete时,原则:谁申请谁释放。
3.在delete指针后,将指针置为NULL。例如:delete p; p = NULL;
4.对new申请后的指针变量赋值,或者p=NULL;
5.内存越界情况太多了,不具体说了。一般情况,在new之后,需要判断分配内存是否成功。声明指针后,置为NULL,例如:int *p = NULL;

Delete出错分析总结(个人总结很到位) 0x0000007ff64426f87e(ucrtbased.dll)处(处于dataa.exe中)引发的异常:相关推荐

  1. 大豆技术面分析_大豆高产栽培技术分析,科学施肥很关键,建议收藏

    大豆高产栽培技术分析,科学施肥很关键,建议收藏 一.种植技术的更新 黑龙江省是我国重要的大豆生产基地,在全国众多大豆生产基地中种植面积一直名列前茅.近些年来,因为种植玉米和水稻的收益要远远超过于种植大 ...

  2. ncm 汇集 matlab,ncm-solutions 压缩包中的文件主要是基于matlab的数值计算以及分析功能学习的很好的例程 266万源代码下载- www.pudn.com...

    文件名称: ncm-solutions下载  收藏√  [ 5  4  3  2  1 ] 开发工具: matlab 文件大小: 1650 KB 上传时间: 2016-11-01 下载次数: 0 提 ...

  3. delete[] 出错

    如 char* s = new char[len]; delete[] s;  //vs2010运行到此处程序不会报错,但是会响一声,然后程序好像在此处卡死了,不往下执行了 前面有过此问题,一直不知道 ...

  4. 常见的电子器件,这篇文章总结得很到位,你还不收藏吗?

    一.电阻 电阻在电路中用"R"加数字表示,如:R13表示编号为13的电阻.电阻在电路中的主要作用为分流.限流.分压.偏置.滤波(与电容器组合使用)和阻抗匹配等. 电阻器的符号 参数 ...

  5. exception日志 php_PHP中错误与异常的日志记录用法分析

    本文分析了PHP中错误与异常的日志记录用法.分享给大家供大家参考,具体如下: 提到 Nginx + PHP 服务的错误日志,我们通常能想到的有 Nginx 的 access 日志.error 日志以及 ...

  6. function在mysql里总是出错_如何在MySQL函数中引发错误

    如何在MySQL函数中引发错误 我创建了一个MySQL函数,如果传递给参数的值无效,则想引发一个错误. 在MySQL函数中引发错误我有哪些选择? 6个解决方案 69 votes MySQL 5.5引入 ...

  7. Emlog很少知道的两处漏洞

    本人第一个搭建的博客系统就是Emlog,所以对Emlog还是有感情的.所以现在创建博客还是选择Emlog(老粉O(∩_∩)O哈哈~) 固然对Emlog漏洞有所关注(基本看完了),现在来谈谈两个Emlo ...

  8. 收藏一篇分析很到位的巨蟹座性格

    https://zhidao.baidu.com/question/214246333.html这些是性格的总结. 1.巨蟹喜欢和自己喜欢的人斗斗嘴,却不会大声吵架或者说根本不会吵架.你想吵,可以.巨 ...

  9. 花生壳和神卓互联的NAT产品为什么没有其它公司做出来(分析很到位)

    最近运行了2年的个人网站,即将到期了,网站用户量不大,想着使用公司的工作机子做服务器勉强玩一玩撑一撑好了,但是需要搞一个NAT穿透工具.于是走上了一个对比之路.. 最近因为接了一个项目,完成的差不多了 ...

  10. 数组delete[] 出错 可能是堆被破坏

    写数组new之后进行数组赋值之类的 在delete[] 数组时出错,碰出这个 后来才发现不少delete[] 的问题,是数组访问时有一个地方越界了. 因为数组是new来创建的,存储区在堆上,当越界访问 ...

最新文章

  1. python 将数组中部分转入新数组_python – 如何将掩码从一个数组应用到另一个数组?...
  2. 【进阶版九宫格背景图片】如何仅仅依靠background的几个属性组合搭配出酷炫的背景图片效果,并自适应任何宽高效果?
  3. 未转变者怎么重置服务器,未转变者怎么把服务器关掉 | 手游网游页游攻略大全...
  4. ICLR 6-6-6!自注意力可以替代CNN,能表达任何卷积滤波层
  5. 聊聊并发(一)——深入分析Volatile的实现原理
  6. 【OpenCV3】双线性插值
  7. SAP内部订单的作用
  8. dotNet Core使用SignalR实现websocket
  9. 从源码说说dispatchTouchEvent与onTouchEvent的关系以及OnTouchListener的用法
  10. 沈航计算机考研上岸,【图片】一战厦大计算机上岸,经验帖。慢更【考研吧】_百度贴吧...
  11. Flowable 数据库表结构 ACT_RE_DEPLOYMENT
  12. 计算机程序丢失或损坏,电脑开机后出现winload.exe丢失或损坏异常的解决方法
  13. 以太网交换机芯片概述
  14. burpsuite基本设置与重复提交比较(一)
  15. sap apo 生产排程软件的架构和设计分析
  16. js计算时间差(天、小时、分钟、秒)(日期计算)
  17. 优雅地乱玩Linux-1-系统
  18. 云南计算机专升本经验分享
  19. 第八部份:Bless安装
  20. html+css+js+快速入门

热门文章

  1. 社交鼻祖人人网被卖 曾意气风发比肩Facebook 一代人的回忆终结了
  2. HBase -ROOT-和.META.表结构(region定位原理)
  3. 无法安装冰点还原_冰点还原精灵能用Windows10吗
  4. Outlook2016 使用技巧
  5. Spring整合Quartz实现动态定时器
  6. Camunda与springboot集成入门实战
  7. Bioventus在马来西亚上市DUROLANE(R),并选中Athrotech作为独家经销伙伴
  8. 哪上班 | 好工作近在咫尺
  9. 【一起学Rust | 设计模式】新类型模式
  10. 计算机的来源知识,计算机的由来计算机从诞生到现在才不过50多年的时间,可是发展却很快,已先后经历了四代,可以说是人丁兴旺。世界上第一台电子计算机1946年诞生于美国,名为埃尼阿克(ENIAC)...