C++ vector的释放

    项目上用到vector容器,没有手动释放,总是会在这里出现内存分配不成功的问题,因此对vector的释放了解了一下。

    初始代码如下:

vector <float*> dets(nTotalLayers); //dets : 记录每层图像的 Hessian 行列式;
for (int octave = 0; octave < nOctaves; octave++){for (int layer = 0; layer < nOctaveLayers + 2; layer++){/* The integral image sum is one pixel bigger than the source image*/dets[index] = (float*)malloc((height / step)*(width / step)*sizeof(float));}step *= 2;}

1、关于是否需要手动释放     

    (1)直接声明的vector容器是一个普通变量,相当于一个未知大小的动态数组,不需要手动释放,超出作用于范围时会自动回收。

    (2)如果是*vec = new vector<>( )这种方法动态创建的vector,则需要delete vector;

    (3)如果vector里面存放的是元素而不是指针,这些元素会随vector的释放而自动释放; 

    (4)如果vector里面存放的是指针,并且指向自己new或malloc的数据,那么需要一个一个手动释放指针。也就是上面代码的情况。

 2、关于vector

     vector类称作向量类,它实现了动态数组,用于创建元素数量变化的对象数组。像数组一样,vector类也用从0开始的下标表示元素的位置,但和数组不同的是,当vector对象创建后,数组的元素个数可以随着vector对象元素个数的增大和缩小而自动变化。当程序员不知道需要多大的内存空间时,可以使用vector,vector会自动申请足够大的空间以供使用。vector会在程序结束时回收内存,但也不能立刻回收投入使用,所以不熟练时尽量少用。

float** dets = (float **)malloc(nTotalLayers*sizeof(float*));
for (int octave = 0; octave < nOctaves; octave++){for (int layer = 0; layer < nOctaveLayers + 2; layer++){/* The integral image sum is one pixel bigger than the source image*/dets[index] = (float*)malloc((height / step)*(width / step)*sizeof(float)); // 这里面有除以遍历图像用的步长if (dets[index] == NULL){cout << "Can't allocate memory to dsts" << endl;exit(1);}}step *= 2;}
//释放指针的向量for (int i = 0; i < nTotalLayers; i++){free(dets[i]);}free(dets);dets = NULL;

3、vector内存的释放

   可以用swap函数进行释放,参考:用swap释放vector

  

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/351933.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

设计模式 工厂方法_使用工厂方法模式设计最佳实践

设计模式 工厂方法在前面的“设计模式”示例中&#xff0c;我们解释了当今常用的“工厂”模式。 在本节中&#xff0c;我们将了解具有更多抽象的更高级的解决方案。 该模式称为工厂方法设计模式。 定义&#xff1a; Factory方法模式提供了一种用于创建对象的方法&#xff0c;…

C Programming Language

代做module作业、代做C/C编程设计作业、代写Programming Language作业、代做C/C课程设计作业C Programming LanguageContribution to module (weighting: 20 %)1st Semester 2018-2019Out: WED. 5th Dec. 2018 Due: 18:00[GMT], WED. 19th Dec. 2018Main objective of the assi…

python修改列表中字典内的值_python修改字典内key对应值的方法

python学习笔记&#xff1a;字典python版本&#xff1a;Python 2.6.6系统环境&#xff1a;CentOS release 6.2 x86_64本文参考了互联网上前辈的一些文章一、字典是python中最灵活的内置数据结构类型&#xff0c;如果把列表看作是有序的对象集合&#xff0c;那么字典就是无序的集…

MATLAB使用技巧

1、ctrl c 或者 ctrl break 强行中断程序运行 2、变量X 右键save as为DX后&#xff0c;再次使用时load有区别&#xff1a;load(DX.mat) 得到的是X这个变量&#xff0c;直接出现在workspace里&#xff1b;Xnew load(DX.mat)得到的是一个名称为Xnew的结构体&#xff0c;里面包含…

Beta 冲刺 (2/7)

团队信息 队名&#xff1a;爸爸饿了组长博客&#xff1a;here作业博客&#xff1a;here组员情况 组员1&#xff08;组长&#xff09;&#xff1a;王彬 过去两天完成了哪些任务 完成考试确定历史记录页面与排行榜页面的前端页面风格接下来的计划 & 还剩下哪些任务 各个食堂平…

您真的需要instanceof吗?

使用instanceof是一种代码味道。 我认为我们可能对此表示同意。 每当我看到这样的构造时&#xff0c;我肯定会出现问题。 也许有人只是在进行更改时没有注意到问题&#xff1f; 也许有一个主意&#xff0c;但是它太复杂了&#xff0c;以至于需要太多的精力或时间才能让开发人员…

python 累积正态分布函数_Python编程基础—Python语句书写规范

Python语句中没有专门的“结束符”。Python解释器不是根据"结束符"来判断语句是否结束,而是根据语法的完整性来判断。一、Python语句编写规则①通常是一行一句x1 1 x2 2 x3 3 print(x1,x2,x3)②也可以一行多句&#xff0c;用语句分隔符“;”对两个语句进行标识x1 …

MATLAB批量改变图片大小

%2018年6月28日11:07:15 %把一个目录下的图片缩放到指定大小 clc clear ratio 0.2;%缩放比例 cd(F:\数据集\crumpled clothes\cloth3\original image\);%不加这句话找不到图片 dpath F:\数据集\crumpled clothes\cloth3\original image\*.JPG;%找到路径下所有格式为.JPG的文件…

基于Libevent的HTTP Server

简单的Http Server 使用Libevent内置的http相关接口&#xff0c;可以很容易的构建一个Http Server&#xff0c;一个简单的Http Server如下&#xff1a; #include <event2/event.h> #include <event2/buffer.h> #include <event2/http.h> #include <Winso…

python写入数据的一种措施_Python 文件数据读写的具体实现

文件数据读写读写文件&#xff0c;本质上是请求操作系统打开一个文件对象&#xff0c;然后&#xff0c;通过操作系统提供的接口从这个文件对象中读取数据(读文件)&#xff0c;或者把数据写入这个文件对象(写文件)。文件读取使用 Python 内置 open() 函数&#xff0c;以 rt 的模…

MATLAB的dir函数

1、作用获得指定文件夹下的所有子文件夹和文件,并存放在在一种文件结构体数组中. 2.使用方法dir(.)列出当前目录下所有子文件夹和文件dir(G:\Matlab)列出指定目录下所有子文件夹和文件dir(G:\Matlab\*.jpg)列出当前目录下符合正则表达式的文件夹和文件3.例如&#xff1a;列出文…

libevent简介和使用

libevent是一个基于事件触发的网络库&#xff0c;memcached底层也是使用libevent库&#xff0c;今天学习下。总体来说&#xff0c;libevent有下面一些特点和优势&#xff1a;* 统一数据源&#xff0c; 统一I/O事件&#xff0c;信号和定时器这三种事件&#xff1b;* 可移植&…

qr码生成_从Java程序生成QR码图像

qr码生成如果您精通技术和小工具&#xff0c;则必须了解QR码。 这些天&#xff0c;到处都可以找到它-在博客&#xff0c;网站&#xff0c;甚至在某些公共场所。 这在移动应用程序中非常流行&#xff0c;在移动应用程序中&#xff0c;您可以使用QR Code扫描仪应用程序扫描QR Cod…

jracdrive变频器说明书580_jracdrive变频器err02

A&#xff1a;高性能密封型变频器-防粉尘、防水、防油污、防腐蚀此款高性能变频器&#xff0c;因为其具有防粉尘、防水、防油污、防腐蚀性能&#xff0c;适用于化工厂、印染厂、化纤厂、纺织厂、输送带、机床、水泥厂、制*厂、食品厂等环境恶劣的场合。变频器硬件特点&#xff…

Harris角点检测+sift描述匹配

最近用到&#xff1a;Harris检测图像中边缘处的特征点&#xff0c;并且需要两张图特征点匹配起来。Harris只是一个角点检测的算法&#xff0c;最终只得到特征点坐标&#xff0c;想要匹配需要描述&#xff0c;而Harris是单尺度的&#xff0c;自己写描述函数又有些麻烦。找到MATL…

python辅助脚本教程_微信跳一跳python辅助脚本实例分享

本文主要为大家整理了关于微信跳一跳的辅助脚本内容&#xff0c;这次我们给大家整理的是关于python的脚本内容&#xff0c;一起来学习下。这段时间微信跳一跳这个游戏非常火爆&#xff0c;但是上分又非常的难&#xff0c;对于程序员来说第一个念头就是通过写一个辅助脚本外挂让…

Bug解决方案

一&#xff1a;百度错误代码或者关键字搜索 二&#xff1a;在博客论坛招贴问人 三&#xff1a;向同事或者公司老人请教 四&#xff1a;程序的每个字母逻辑浏览一遍 五&#xff1a;重启电脑 六&#xff1a;环境软件重装 七&#xff1a;回去睡一觉&#xff0c;等待明天早上再看 八…

非Java专家的APM:什么泄漏?

通过AppDynamics解决应用程序问题的速度提高了10倍–以最小的开销在代码级深度监视生产应用程序。 开始免费试用&#xff01; 内存&#xff0c;内存&#xff0c;内存... 内存是Java的关键部分&#xff0c;尤其是内存管理。 作为开发人员&#xff0c;内存管理不是您要定期执行…

总结libevent安装方法

1.先用&#xff1a;ls -al /usr/lib | grep libevent 查看是否已安装&#xff0c;如果已安装且版本低于1.3&#xff0c;则先通过&#xff1a;rpm -e libevent —nodeps 进行卸载。 2.下载libevent安装包&#xff1a;libevent-1.4.13-stable.tar.gz&#xff0c;然后解压。 3.切…

opencv中匹配点对的坐标提取

在opencv中&#xff0c;特征检测、描述、匹配都有集成的函数。vector<DMatch> bestMatches;用来存储得到的匹配点对。那么如何提取出其中的坐标呢&#xff1f; int index1, index2;for (int i 0; i < bestMatches.size(); i)//将匹配的特征点坐标赋给point{index1 b…