自我总结 C++ 数据链表 内存一直涨 解决方案

问题类别

这次出问题的地方是数据链表的内存管理

错误现象

在我的人脸识别前端没有连上后端的时候,我的前端内存疯涨。

找到的错误原因

我的数据链表没有做抛弃处理,每新来个数据都新建一个数据结构,然后等到处理完再删除。这就产生一个问题,如果后端不处理我的数据,我的前端内存将会一直涨。

找错误过程

因为我是第一次写一个完整的前端,没想到我的前端设计引起了这么大的问题,最开始我不知道是什么原因,初步定位是新申请内存空间,然后没有进行删除导致。利用书上学到的知识,我可以对新申请的对象进行计数,大概如下:

struct str_video_pic
{
	static int str_video_pic_num;
	str_video_pic(){ 
		str_video_pic_num++; 
		cout << "str_video_pic_num个数:"<<str_video_pic_num << endl;
	}
	~str_video_pic(){
		str_video_pic_num--;
	}
	cv::Mat video_pic; //注册图片
	std::vector<cv::Rect> rects;
};

每次新建一个对象,就输出一次当前类对象的个数,因为我的操作里面不涉及结构体赋值,所以没有重载’=’。
后面发现虽然我在最后把所有的对象都进行了删除,可类对象技术还是一直在涨,最后想到可能是虽然一直在往链表里面添加,可却没有对其经行处理,设置最大链表长度解决问题。

经验总结

对于实时性要求比较强的项目,需要设置一个最大链表长度,以免在后端没有处理的情况下,前端内存一直堆积。
可以利用公司已经定义好的链表结构,就不用重复造轮子了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值