调程序崩溃的心得体会

xiaoxiao2021-02-27  159

最近一个项目要结束了,可是程序冒出一大堆的崩溃,天呐,接二连三,我呕心沥血整整调了三天,终于才把所有的崩溃都给解决了,实在很不容易,所以在这里大概整理一下,把我的拙见记录下来。 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); }
转载请注明原文地址: https://www.6miu.com/read-16997.html

最新回复(0)