调程序崩溃的心得体会

最近一个项目要结束了,可是程序冒出一大堆的崩溃,天呐,接二连三,我呕心沥血整整调了三天,终于才把所有的崩溃都给解决了,实在很不容易,所以在这里大概整理一下,把我的拙见记录下来。
1.自己开辟的内存一定要自己手动释放。malloc的要free,new的要delete。
2.数组越界。用数组真的是得千万小心了。我出错的原因是:我是用摄像头采集图像,但是我一次采集时长是一个固定的时间,然后在这段时间内,摄像头采集的图像张数也是固定的,记为n。我会对每张图像做一个处理,然后把处理结果保存下来,那么我就定义了一个数组,大小比n大(就是担心会数组越界什么的)。结果当我换了一个摄像头,它的帧率很高,相同时间内可以采集很多图像,是n的好几倍,我没有察觉到,没有改变数组的大小,依然把处理结果放到这个数组中,结果当然就越界啦。害得我真是找了好久好久。
3.是用opencv的时候出的错。
Mat image;
image = image(Range(h1,h2),Range(w1,w2));
Rect r0;
Mat frame;
frame = frame(r0);

以上两种原地的操作以后还是不用了,居然导致我崩溃,我也是很郁闷,以前也都是这样用的。不过经过这次教训,以后还是不要原地操作了,安全是最重要的。
4.我会把采集到的图像写到一个文件夹里,命名是frame0.jpg,frame1.jpg......,然后在每一次开始采集前,我会把上一次采集到的图像删掉,删掉的命令是
system("del C:\\project\\images\\frame*.jpg");
然后这样子也是导致了我崩溃的。
我想着是我删除的命令写在前面,那就删完了然后我再往里面写图像,应该不会出现任何问题,但是确实是崩溃了,我不知道为什么。最后只得改成了在for循环里面一个一个删除。
char path1[100] = "C:\\project\\images\\frame";
char path[200];
for(I=0;i<n;i++)
{
sprint(path,"%s%d.jpg",path1,i);
remove(path);
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值