再记录一次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' ...
随机推荐
- 20145311 《Java程序设计》第4周学习总结
20145311 <Java程序设计>第4周学习总结 教材学习内容总结 第六章(继承与多态) 6.1继承 6.1.1-继承共同行为:如果在程序设计上存在着重复,那就需要修改,可以吧相同的程 ...
- 2017-2018-1 JaWorld 第三周作业
2017-2018-1 JaWorld 第三周作业 团队展示 队员学号 队名 团队项目描述 队员风采 团队的特色 团队合照 团队初步合作 前两周的反思与总结 需要改进的地方 团队选题 *采访老师或有开 ...
- 试着用React写项目-利用Webpack搭环境
转载请注明出处:王亟亟的大牛之路 最近都蛋疼,然后前些天开了个会就是关于"不加班就得死"的死命令,作为抵制加班的先头兵,我感觉我时日无多是时候加快武装自己的速度不然吃土都不配了,就 ...
- 定义 S4 泛型函数
在前面的例子中,我们可以看出 S4 比 S3 更正式,因为 S4 类有类的正式定义.同样, S4 的泛型函数也更加正式.在一个关于形状的例子中,我们定义了一系列具有继承关系的 S4 类,只是继承关系的 ...
- Memento(备忘录)
意图: 在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态.这样以后就可将该对象恢复到原先保存的状态. 适用性: 必须保存一个对象在某一个时刻的(部分)状态, 这样以后需要时它 ...
- Intel Caffe 与原生Caffe
1. 首先安装好docker,拉取intel caffe image: $ docker pull bvlc/caffe:intel 试着运行: $ docker run -it bvlc/caff ...
- C# 字符串与字节数组相互转换
https://www.cnblogs.com/xiaoqingshe/p/5882601.html
- TTL的具体含义
TTL(Time To Live)生存时间值,在IP数据包从源到目的的整个转发路径上,每经过一个路由器,路由器都会修改这个TTL字段值,具体的做法是把该TTL的值减1,然后再将IP包转发出去.如果在I ...
- bzoj-5049-线段树
5039: [Jsoi2014]序列维护 Time Limit: 20 Sec Memory Limit: 256 MBSubmit: 323 Solved: 193[Submit][Status ...
- 手写DCGAN
//加上了注释,对pytorch又加深了理解import torch as t from torch import nn from torch.autograd import Variable fro ...