再记录一次delete出错的经历
调试的时候进行到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出错的经历的更多相关文章
- geotrellis使用(十二)再记录一次惨痛的伪BUG调试经历(数据导入以及读取瓦片)
Geotrellis系列文章链接地址http://www.cnblogs.com/shoufengwei/p/5619419.html 目录 前言 BUG还原 查找BUG 解决方案 总结 后记 一.前 ...
- 记录第n次网站渗透经历
如标题所示,第x次实战获取webshell的经历是非常美好且需要记录的(毕竟开始写博客了嘛).这能够证明这一路来的学习没有白费,也应用上了该用的知识. 首先怎么说呢,某天去补天看了看漏洞,发现有一个网 ...
- 1 - JVM随笔分类(java虚拟机的内存区域分配(一个不断记录和推翻以及再记录的一个过程))
java虚拟机的内存区域分配 在JVM运行时,类加载器ClassLoader在加载到类的字节码后,交由jvm的执行引擎处理, 执行过程中需要空间来存储数据(类似于Cpu及主存),此时的这段空间的分 ...
- 再记录一下如何配置oracle instantclient
这问题遇到很多次,每次重装系统就遇到一次,却总是搞半天才搞定. 今天再次花费几个小时解决,终于有一个清晰的认识必须记录一下. 一.下载解压,不建任何目录,直接复制tnsname.ora过来.(当然也可 ...
- JS的toFixed方法设置小数点位数后再进行计算,数据出错问题
这个应该算作失真,或者也不算.情况就是用了toFixed后再进行相关计算,得不到预期的结果 具体看例子 比如想动态计算百分比,保留一位小数如94.4%这样子 var blobTo = 409600; ...
- [python]记录Windows下安装matplot的经历
最近学习在看<机器学习实战>一书,第二章的时候要用到Natplotlib画图,于是便开始安装Matplotlib.本文所用到的所有安装包都可以在文末的链接中找到. 首先从Matplotli ...
- Axios再记录
一个基于Promise 用于浏览器和 nodejs 的 HTTP 客户端(可实现ajax的请求) 有关学习网址:https://www.tuicool.com/articles/eMb2yuY ...
- 记录一次乱码问题修复经历!排查修复Poi-tl使用HttpServletResponse导出Word乱码问题
问题 Poi-tl中HttpServletResponse导出Word乱码问题: 文件名使用中文,中文名乱码 导出的文件下载后乱码 原因 文件名中文乱码: 没有设置文件名的编码规则 文件下载乱码: 在 ...
- 记录一次json转换的经历
需求:数据库里面的一个字段,存的是json数据,类似{‘name’:“name1”,'items':“[{code:0,name:'name2'}]”},{‘name’:“name3”,'items' ...
随机推荐
- mysql绑定参数bind_param原理以及防SQL注入
假设我们的用户表中存在一行.用户名字段为username.值为aaa.密码字段为pwd.值为pwd.. 下面我们来模拟一个用户登录的过程.. <?php $username = "aa ...
- Ubuntu16.04下配置pip国内镜像源加速安装【转】
本文转载自:https://blog.csdn.net/yucicheung/article/details/79095742 问题描述 基于国内网速的问题,我们直接pip安装包通常速度非常慢,而且经 ...
- LINQ 学习路程 -- 查询操作 GroupBy ToLookUp
Grouping Operators Description GroupBy GroupBy操作返回根据一些键值进行分组,每组代表IGrouping<TKey,TElement>对象 To ...
- The P4 Language Specification v1.0.2 Introduction部分
Introduction P4 is a declarative language for expressing how packets are processed by the pipeline o ...
- 【Python】实现将testlink上的用例指定格式保存至Excel,用于修改上传
背景 前一篇博客记录的可以上传用例到testlink指定用例集的脚本,内部分享给了之后,同事希望能将testlink上原有的用例下载下来,用于下次修改上传,所有有了本文脚本. 具体实现 获取用例信息 ...
- HTML之页面镶嵌体验
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- JavaScript--语法4--函数1
JavaScript--语法4--函数1 一.心得 二.代码 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" " ...
- org.springframework.transaction 包改成 spring-tx
org.springframework.transaction 包改成 spring-tx org.springframework.transaction 3.2.2以后的版本,全改到 spring ...
- 创建对象并生成结果的3个步骤-Chapter 3 P38
必须完成3个步骤才能创建对象并生成结果: 1 创建对象 namespace LanguageFeatures { public class Product { public int Product ...
- vsftpd日志配置及查看——可以将vsftpd记录在系统日志里
vsftpd日志配置及查看 vsftpd ftp服务器的日志设置,可以通过修改主配置文件/etc/vsftpd.conf实现.主配置文件中与日志设置有关的选项包括xferlog_enable .xfe ...