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

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

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

情景分析:

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

避坑指南:

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

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

情景分析:

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

避坑指南:

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

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

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

情景分析:

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

避坑指南:

不要过分的信任std::shared_ptr

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值