这些没躲过的坑

本文分享了作者在使用C++编程过程中遇到的一些常见问题及解决方案,包括如何正确计算像素平均值、避免栈溢出、解决内存访问冲突等问题,并介绍了在VS环境中配置FFMPEG等第三方库的经验。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

2018.05.05

本次需要统计4096个像素的平均值,使用了如下代码

double CtuMean=temp/height*width;
错误的原因是没有考虑到运算符的优先级,以后这种情况要注意。尽量加个括号。

2018.05.07

vs2005以上,使用strcat()函数时,会提示“建议使用strcat_s()”函数,如果不想使用这个函数,关闭预编译提醒,

在项目->属性->C/C++–>预处理器->预处理器定义中添加“_CRT_SECURE_NO_WARNINGS”,即可关闭“_CRT_SECURE_NO_WARNINGS”的警告。

2018.05.25

写了一个程序,对监控类视频进行运动检测,主函数是这么写的。

#include "interface.h"
#include<iostream>
#include <time.h>

//#define FRAME_SIZE 3110400 //1920*1080分辨率
#define FRAME_SIZE 1382400   //1280*720分辨率
char yuvData[FRAME_SIZE];
char resultMatrix[128][128];//检测区域最大128x128
bool alarmResult;
int main()
{
...
//读取文件到内存
fread(yuvData, sizeof(char), sizeof(yuvData), InputFile);
...
}

出现的问题:
1.”0xC0000005: 写入位置 0x00000000 时发生访问冲突的解决办法”
原因:第一次试验用的1920*1080分辨率视频,后来换了1280*720分辨率,但是宏定义的大小没有变,还是原来1920*1080分辨率的大小。导致读取文件出错,引起后边一系列出错。
2.char yuvData[FRAME_SIZE];放在main函数中报错,栈溢出。
全局变量在静态存储区分配内存,局部变量是在栈上分配内存空间的。(c++在运行时会动态创建一个堆栈段,里面存放着调用栈,保存着函数的调用关系和局部变量。)如果数组太大,可能会造成栈溢出。大数组最好放在全局变量区

2018.06.04

几天不写代码,就忘了VS操作中如何从函数定义的一个括号转到结束处的另外半个括号的方法,记录一下:

ctrl+]

2018.06.26

1.这两天在学习FFMPEG,配置一直不成功,include和lib都弄好了,就是编译的时候显示无法引用,后来想起来我下载的是64位的,而vs2013选择的是win32模式,切换到x64模式下后,立马编译成功了,发现原来ffmpeg的dev版本是对x64和win32敏感的,下载什么版本的dev就用什么版本的编译器配置就对了
2.像Opencv、FFMPEG、SDL这些第三方库,在vs配置中都需要在三个地方改东西:

  • c/c++->常规->附加包含目录中让包含库目录的include
  • 链接器->常规->附加库目录让包含库目录的lib
  • 链接器->输入->附加依赖项,输入lib目录下的*.lib的名称全称。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值