C++编程技巧(长期更新)
1.数组使用
int* p = new int[5](); // 数组新建并全部初始化为0int* p;p = new int[5]();int* q = new int[5]; // array elements all have indeterminate valuefor(int i = ;i < q.size();++i)
cout << "q[" << i << "] : " << q[i] << endl;
cout << endl;
还有将一个结构体变量放进队列的时候内存泄漏是个很大的问题。在结构体里面谨慎的使用指针,看下面的一个例子。
定义了一个结构体变量:
struct MyStruct
{
Mat irdata;
Mat depthdata;
float *array;
};
其中包含了两个mat矩阵。和一个float矩阵的指针。
在调用的时候千万要注意,
#include "que-mat.h" using namespace cv;
using namespace std;
int cnt = ;
int k = ;
int p, q;
MyStruct s_copy;
std::deque<MyStruct> qe;
MyStruct s1;
MyStruct s2;
bool matqueue(Mat inputdata1, Mat inputdata2, float *array1)
{
cnt++;
//s1.array = new float[20]{};
//插入队尾
s1.irdata = inputdata1;//调用问题,这里因为指向了同一个内存,所以必须clone()一下。
s1.depthdata = inputdata2;
s1.array = array1;//调用问题,该指针一直指向了同一片内存空间,所以会被不停的刷掉,所以永远只有最后一个数据失是正确的,其他存储数据都是乱码
qe.push_back(s1);
int n = qe.size();
if (qe.size() > ) qe.pop_front();
cout << "队列大小 " << n << endl;
s_copy = qe.back();
if ((s_copy.array[] == ) || (s_copy.array[] == )){
// if (n == 10){
for (int j = ; j < ; j++){
k++;
//s_copy.array = new float[20]{};
s2 = qe.back();
cout << "队列大小 " << qe.size() << "s2.array " << s2.array[] << endl;
save_image(s2.irdata, s2.depthdata, , , k);
save_txt(s2.array, k);
//队首出栈
qe.pop_back();
}
} if (cnt == ){
waitKey();
} // 判断队列是否为空
if (qe.empty()){
std::cout << "Enpty" << std::endl;
return ;
}
return ;
}
s1.irdata = inputdata1.clone();
s1.depthdata = inputdata2.clone();
//申请一个空间,再memset进去
s1.array=(float*)malloc(*sizeof(float)); memset(s1.array,&array,);//将数据填充进去
qe.push_back(s1);
关于内存机制,需要不断的学习,修改后的代码还有一个问题,就是为调用迅速将文件中参数引用也发生了修改
bool inque_mat(const Mat &inputdata1, const Mat &inputdata2, GestureInfo gestureInfo);
const Mat &inputdata1。这样子调用比较稳定。
C++编程技巧(长期更新)的更多相关文章
- c语言技巧--长期更新
1. #define LOWER(c) (unsigned char)(c | 0x20) 换成小写 2. gcc -Wall -Werror //告警当成 错误来处理 ...
- [原创][FPGA]Quartus实用小技巧(长期更新)
0. 简介 在使用Quartus软件时,经常会时不时的发现一些小技巧,本文的目的是总结所查阅或者发现到的小技巧,本文长期更新. 1. Quartus中的模板功能 最近在Quartus II的菜单里找到 ...
- 一些有意思的面试题(持续更新) .C语言编程技巧札记
一些有意思的面试题(持续更新) http://blog.csdn.net/wangyuling1234567890/article/details/38565239 C语言编程技巧札记 http:// ...
- Java代码优化(长期更新)
前言 2016年3月修改,结合自己的工作和平时学习的体验重新谈一下为什么要进行代码优化.在修改之前,我的说法是这样的: 就像鲸鱼吃虾米一样,也许吃一个两个虾米对于鲸鱼来说作用不大,但是吃的虾米多了,鲸 ...
- Java编程技巧:if-else优化实践总结归纳
文/朱季谦 说实话,其实我很讨厌在代码里大量使用if-else,一是因为该类代码属于面向过程的,二嘛,则是会显得代码过于冗余.这篇笔记,主要记录一些自己在工作实践当中针对if-else的优化心得,将会 ...
- 无插件Vim编程技巧
无插件Vim编程技巧 http://bbs.byr.cn/#!article/buptAUTA/59钻风 2014-03-24 09:43:46 发表于:vim 相信大家看过<简明Vim教程& ...
- 无插件VIM编程技巧(网摘)
无插件VIM编程技巧 原文出处:[陈皓 coolshell] 相信大家看过<简明Vim教程>也玩了<Vim大冒险>的游戏了,相信大家对Vim都有一个好的入门了.我在这里把我日常 ...
- PLSQL Developer 11 使用技巧(持续更新)
PLSQL Developer 11 使用技巧 (持续更新) 目录(?)[-] 首先是我的颜色配置 常用快捷键 提升PLSQL编程效率 按空格自动替换 关闭Window窗口 PLSQL 实用技巧 TI ...
- Labview学习之路(十一)日常编程技巧
此文章用于记录自己在学习Labview过程中所用到的编程技巧,会一直更新下去. (一)移动控件 直接鼠标拖动. 按住shift键,鼠标移动,可以水平和竖直移动(取决于鼠标最开始的移动方向). 使用键盘 ...
- js异步编程技巧一
异步回调是js的一大特性,理解好用好这个特性可以写出很高质量的代码.分享一些实际用的一些异步编程技巧. 1.我们有些应用环境是需要等待两个http请求或IO操作返回后进行后续逻辑的处理.而这种情况使用 ...
随机推荐
- C#5.0支持的await格式
C#5.0支持的await格式 C#5.0引入了编译器支持的 async 和 await 关键字,这就为开发者提供了使用同步思想写异步代码的方便. 但是有些传统函数仅提供了异步回调实现,如何对其封装, ...
- PHP使用DomDocument抓取HTML内容
有时候会有需要从一个HTML页面来分离出你需要的一些数据来进行处理. 当然自己分析文件肯定可以,但是比较快速且方便的是使用正则表达式或者DOM. 鉴于正则表达式我不熟悉,所以我打算使用DOM来完成. ...
- 如何制作一个类似Tiny Wings的游戏 Cocos2d-x 2.1.4
在第一篇<如何使用CCRenderTexture创建动态纹理>基础上,增加创建动态山丘,原文<How To Create A Game Like Tiny Wings with Co ...
- ADO.NET—两种连接模式
一.ADO.NET简介 ADO.NET的名称起源于ADO(ActiveX Data Objects),这是一个广泛的类组,用于在以往的Microsoft技术中访问数据.用来访问数据库,.NET环境下首 ...
- Java之路——Java初接触
本文大纲 1.Java是什么 2.Java历史 3.Java技术范围 3.1 Java SE平台技术范围 3.2 Java EE技术范围 3.3 Java 体系技术范围 4.总结 1.Java是什么 ...
- log4net 开箱即用
废话少说,先上代码 log4net Demo 好的系统都有日志,log4net 是我在.net平台下用过最爽的日志库,简单易用.功能强大. 基于配置(配置很简单,一看就明,通用,拷去即用): 可同时保 ...
- go语言中sync包和channel机制
文章转载至:https://www.bytelang.com/article/content/A4jMIFmobcA= golang中实现并发非常简单,只需在需要并发的函数前面添加关键字"Go&quo ...
- eclipse中svn插件的安装和tortoiseSVN的安装
在项目的开发中一般都需要用到版本控制,其中用的比较多的就是svn(subVersion),svn的使用既可以以插件的形式,也可以以客户端的形式使用.今天就介绍一下eclipse中svn插件的2种安装方 ...
- Fiddler捕获抓取 App端数据包
最近项目设计到App抓包,所以采用Fiddler工具来采集获取APP数据包,但是fiddler对有些app是无法捕获到数据包的,以下是我的处理方法: 1. 我默认代理端口使用的是自定义的端口而不是默认 ...
- appium+robotframework的简单实例
在上篇文章中,我们搭建好了appium+robotframework的环境,这篇文章中主要是一个简单实例. 一.测试用例编写前提 1.模拟器(或手机)连接电脑 adb devices ...