c++之常犯错误(二)

注意printf少参数会崩溃

modbus是独占模式

结构体注意字节对齐

数组注意防止越界

使用short要注意范围溢出

找不到错误时可以试试删除中文注释

//(*imageData)[i*width * 3 + j * 3 + 2]  
二级指针注意优先级

c++线程只能传指针或者值,不能传引用,参数传string不要传char*

文件编码,linux本地为utf-8,window下为ANSI

//unsigned char **oi = new unsigned char *[Row];
//for (int i = 0; i < Row; i++)oi[i] = new unsigned char[Col];
这样申请的内存并不是连续多的,不能直接fwrite写,只有char oi[][]才是真正的二维数组
所以能用vector代替C语言数组,一维的数组就用一维的vector,多维的数组就用多维的vector,可以避免内存泄露
接口尽量用string 代替char* ,当然最外层如果要求是纯C接口就再封装一层,否则尽可能用STL
另外不定长的多维数组可以用字符串转换(可能影响效率)

访问图像的像素时,一定要先行、再列的循环访问,次序不能换,行row(高height),列col(宽width)
//OPENCV的RGB存储顺序实际是(B G R)
BMP图片的第一个像素点在左下角,然后往右一个个存取,最后一个在右上角
RAW第一个像素点是在左上,最后一个像素点是右下,所以bmp转raw就是y坐标互换

所谓的异步就是开线程处理

接头单一原则,把大的功能拆成小块,功能尽可能单一方便应用层灵活调用

//bmpHead.BfOffBits = 1078 + 256;
在bmp图片存储额外数据

数据类型整形尽量用 uchar(能不用char就不用) int 和long long 浮点型尽量用float和double

//reduce(data_fore1, thresh_min, 0, CV_REDUCE_MIN,CV_64F);
opencv的reduce函数输入必须和输出一致都为doble
//opencv数据不带通道数的这些类型就是默认通道数为1
//CV_8U就等同于CV_8UC1,CV_32S就等同于CV_32SC1
//S--代表---signed int---有符号整形
//U--代表--unsigned int--无符号整形
//F--代表--float---------单精度浮点型

//在循环里加日志需要慎重,最好加在前后

std::fflush会乱写东西
oftream 记得close() 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值