调试的时候进行到delete语句时出现问题,我做的操作是在函数体内用int*申请了N个内存空间,这让我十分纳闷,为什么不能delete呢?

回忆到之前delete出错也遇过一次问题

手动封装OpenCV1.0的IplImage读取保存功能遇到的小问题

原因是申请内存并不是通过new操作,而是自带的函数(cvLoadImage),所以需要自带的函数(cvReleaseImage)来释放内存。

典型的错误信息:_BLOCK_TYPE_IS_VALID(pHead->nBlockUse)

而这次错误信息不一样

HEAP CORRUPTION DETECTED

搜一下就能看到很多解决方案,即使是复制粘贴的也还算靠谱。不过这里提示比之前明显了:

第一句:检测到HEAP(堆)的破坏:在普通块(#14),地址是0xx003CC0E0;

第二句:CRT检测到应用程序在堆缓存的结尾之后进行写入操作。

第二句是最直白的,但是写代码看细心,调试得看眼力。注释掉跟写入无关的操作后定位到一句,乍看之下没问题,仔细一看……

我对申请内存空间的int*进行了memcpy操作,由于我写的是函数模板,所以自然地写上了sizeof(T)而不是sizeof(int),幸好我这是验证某个排序是不是稳定排序的程序,而不是直接的小测试,如果sizeof(T)也是4的话,也就不会报错了,当然,这也会导致错误检查不出来。

PS:主要原因还是现在也有点晚了,没有集中注意力,错误难免,而使用C风格指针管理内存确实需要注意。

说到这里,其实C++风格也好不到哪里去,上次对std::set进行set_union操作时一直出错,而且由于STL算法都是函数模板,错误信息几十行,如果是刚入门的绝对被吓哭。最后发现set_union算法是默认写入对象预留了足够多空间,而std::set不能初始化大小,所以需要用插入迭代器insert_iterator(把迭代器作为参数传入inserter函数即可)。

对STL算法包括迭代器等基本措施没去了解实现的话这时候会很不知所措的。

再记录一次delete出错的经历的更多相关文章

  1. geotrellis使用(十二)再记录一次惨痛的伪BUG调试经历(数据导入以及读取瓦片)

    Geotrellis系列文章链接地址http://www.cnblogs.com/shoufengwei/p/5619419.html 目录 前言 BUG还原 查找BUG 解决方案 总结 后记 一.前 ...

  2. 记录第n次网站渗透经历

    如标题所示,第x次实战获取webshell的经历是非常美好且需要记录的(毕竟开始写博客了嘛).这能够证明这一路来的学习没有白费,也应用上了该用的知识. 首先怎么说呢,某天去补天看了看漏洞,发现有一个网 ...

  3. 1 - JVM随笔分类(java虚拟机的内存区域分配(一个不断记录和推翻以及再记录的一个过程))

    java虚拟机的内存区域分配   在JVM运行时,类加载器ClassLoader在加载到类的字节码后,交由jvm的执行引擎处理, 执行过程中需要空间来存储数据(类似于Cpu及主存),此时的这段空间的分 ...

  4. 再记录一下如何配置oracle instantclient

    这问题遇到很多次,每次重装系统就遇到一次,却总是搞半天才搞定. 今天再次花费几个小时解决,终于有一个清晰的认识必须记录一下. 一.下载解压,不建任何目录,直接复制tnsname.ora过来.(当然也可 ...

  5. JS的toFixed方法设置小数点位数后再进行计算,数据出错问题

    这个应该算作失真,或者也不算.情况就是用了toFixed后再进行相关计算,得不到预期的结果 具体看例子 比如想动态计算百分比,保留一位小数如94.4%这样子 var blobTo = 409600; ...

  6. [python]记录Windows下安装matplot的经历

    最近学习在看<机器学习实战>一书,第二章的时候要用到Natplotlib画图,于是便开始安装Matplotlib.本文所用到的所有安装包都可以在文末的链接中找到. 首先从Matplotli ...

  7. Axios再记录

    一个基于Promise 用于浏览器和 nodejs 的 HTTP 客户端(可实现ajax的请求) 有关学习网址:https://www.tuicool.com/articles/eMb2yuY    ...

  8. 记录一次乱码问题修复经历!排查修复Poi-tl使用HttpServletResponse导出Word乱码问题

    问题 Poi-tl中HttpServletResponse导出Word乱码问题: 文件名使用中文,中文名乱码 导出的文件下载后乱码 原因 文件名中文乱码: 没有设置文件名的编码规则 文件下载乱码: 在 ...

  9. 记录一次json转换的经历

    需求:数据库里面的一个字段,存的是json数据,类似{‘name’:“name1”,'items':“[{code:0,name:'name2'}]”},{‘name’:“name3”,'items' ...

随机推荐

  1. 20145221 《Java程序设计》第四周学习总结

    20145221 <Java程序设计>第四周学习总结 教材学习内容总结 第六章部分 - 继承与多态 何谓继承 继承 继承是Java程序设计语言面向对象的又一重要体现,允许子类继承父类,避免 ...

  2. 【Java----判断字符串是否为有效的日期格式】

    public static boolean isValidDate(String str) { boolean convertSuccess=true; // 指定日期格式为四位年/两位月份/两位日期 ...

  3. sqlyog注册码

    姓     名(Name):ttrar 序 列 号(Code):8d8120df-a5c3-4989-8f47-5afc79c56e7c或者(OR)姓     名(Name):ttrar序 列 号(C ...

  4. LA 6892 The Safe Secret(矩阵连乘)

    https://vjudge.net/problem/UVALive-6892 题意: 给出n个数字和n个符号(+,-,*和?),?可以为+,-,*中任意一个,现在要计算出这个式子的最小值和最大值,并 ...

  5. POJ 2391 Ombrophobic Bovines(二分+拆点+最大流)

    http://poj.org/problem?id=2391 题意: 给定一个无向图,点i处有Ai头牛,点i处的牛棚能容纳Bi头牛,求一个最短时间T,使得在T时间内所有的牛都能进到某一牛棚里去. 思路 ...

  6. UVa 1637 纸牌游戏(全概率公式)

    https://vjudge.net/problem/UVA-1637 题意: 36张牌分成9堆,每堆4张牌.每次可以拿走某两堆顶部的牌,但需要点数相同.每种拿法的概率均为1/5.求成功概率. 思路: ...

  7. 前端工程化 - Yeoman

    什么是Yeoman Yeoman是一个前端构建工具.它整合了yo(yeoman).gulp/grunt和npm/bower等工具,组成了一个完整的工具集合,为前端开发提供了一套完整的解决方案. Yeo ...

  8. 1406 data too long for column 'content' at row 1

    很奇怪,很邪门. content字段用的是text格式,按理说不会出现数据太长的问题. 后来搜索了一下,需要设置sql_mode.或者设为, mysql> SET @@global.sql_mo ...

  9. java线程中的interrupt,isInterrupt,interrupted方法

    在java的线程Thread类中有三个方法,比较容易混淆,在这里解释一下 (1)interrupt:置线程的中断状态 (2)isInterrupt:线程是否中断 (3)interrupted:返回线程 ...

  10. 不能用Xming连接到 Centos 7

    修改/etc/gdm/custom.conf 之后, Centos 6是没有问题的. 可是Centos 7 不行. 根据这个连接,运行firewall-config,把网络改到trusted级别, 能 ...