ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

C/C++ 常见的内存泄露案例

2022-03-21 10:04:07  阅读:175  来源: 互联网

标签:容器 C++ API 内存 操作 泄露 避坑 指针


在编程工作生涯中本人亲自写出的的或者见过的内存泄露案例记录。

(1)使用三方C语言库错误

情景分析:

例如一些三方开源的C语言动态库,如:openssl等,API使用比较复杂,完成一个完整的逻辑需要调用多个API函数,其中会传入一些指针,由库提供的API函数帮用户完成对象的创建,同时也会提供相应的释放或销毁API函数,但往往再用完后就会忘记主动调用释放函数,来释放这些指针,造成内存的泄露。

避坑指南:

在使用三方不熟悉的库时,一定要自己先写一个死循环的Demo程序,运行起来之后,观看内存的变化。确定自己使用三方库提供的API函数正确无误且安全后,再写入项目。

(2)全局容器的内部成员不断增长

情景分析:

定义了一个无容量限制的全局的容器(list,vector等),在一个线程任务中反复的对这个容器进行装填操作但并没有取出操作,或者装填操作大于取出操作,从而造成此容器不断的增长,从而造成内存泄露。

避坑指南:

在写一个长时间运行的线程或进程时,一定要注意全局容器变量的写操作,取操作,清空操作。

如果可以的话,加上容器的容量限制,到达某个限制时进行强制清除或者覆盖操作,避免容器的无限增长。

(3)智能指针引用计时器无法清0

情景分析:

C++的std::shared_ptr很好用,他可以在引用计时器为0时,自动释放指向的内存,但当这类指针被传递给一些全局变量尤其是全局的容器时,则会造成引用计时器无法归0。

避坑指南:

不要过分的信任std::shared_ptr

标签:容器,C++,API,内存,操作,泄露,避坑,指针
来源: https://blog.csdn.net/Kernel_Heart/article/details/123627731

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有