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操作返回后进行后续逻辑的处理.而这种情况使用 ...
随机推荐
- service structure flowchart with full stack functionality in a brife map
More functionality will be added and running This diagram is just an easy chart for people to digest
- Jquery 图片轮播实现原理总结
Jquery 图片轮播实现原理总结 以前要做图片轮播效果的时候,总是在网上找一段jquery的复制粘贴进去,只索取不奉献,今个就把我对这个的实现原理讲解一下. 首先说下,我在网上找的例子全是用的UL ...
- TCPDump 抓Loopback数据包
编写网络程序必备截包工具, unix下面自带tcpdump, linux就不用说了.用于排查网络程序的bug,命令行如何使用请百度谷歌.分析包推荐wireshark,可视化非常方便.一般都是在非Win ...
- LAMP编译安装遇到的问题
apache安装 1, no SSL-C headers found configure: error: ...No recognized SSL/TLS toolkit detected 解决办法: ...
- OpenCV环境搭建
前言 我在上本科时候曾经用过opencv,那时候还是1.x版本,还必须在linux下自己编译. 时过境迁,最近突然想起来写个小程序来分析图片,就又想起了opencv.现在已然是2.4的版本. 环境搭建 ...
- ASP.NET Zero--5.配置权限
修改角色的时候,会有一份权限列表,可以给这个角色分配哪些权限,那如何添加一个新权限呢? 这里以添加一个“测试”的权限为例 1.打开AppPermissions.cs [..\MyCompanyNa ...
- DotNet加密方式解析--对称加密
离过年又近了一天,回家已是近在咫尺,有人欢喜有人愁,因为过几天就得经历每年一度的装逼大戏,亲戚朋友加同学的各方显摆,所以得靠一剂年终奖来装饰一个安稳的年,在这里我想起了一个题目“论装逼的技术性和重要性 ...
- Maven 插件 maven-tomcat7-plugin - 常用命令及配置
常用命令 tomcat7:deploy 说明:部署 WAR 到 Tomcat tomcat7:help 说明:查看插件帮助信息 tomcat7:run 说明:支行当前项目 配置 <project ...
- ruby操作mongo DB
web自动化中,对操作日志功能进行验证(操作日志存在mongoDB中). 为了避免前面操作产生的日志影响结果校验,我们需要先清除之前的所有操作日志. require 'mongo' host = '1 ...
- Git安装使用
转载:http://www.open-open.com/lib/view/open1414396787325.html 1.window版地址 https://git-for-windows.gith ...