C++总结4——内存泄露/资源泄露【转】

 

(转自:https://blog.csdn.net/wendy_keeping/article/details/75205781

内存泄露/资源泄露现象 
1.malloc/new动态申请的内存,忘记写free/delete,导致内存泄露。

2.调用默认的赋值运算符重载函数,发生浅拷贝现象,导致内存泄露。如下图: 

这里写图片描述
3.在构造函数中new,但是程序运行过程中抛出异常,未调用析构函数。

4.构造函数中调用new开辟内存后,抛出异常。对象未构造成功,不会调用析构函数,导致new的堆内存没有释放。

5.T *p = new T[100]; delete p; 
new数组,可是只析构了第一个对象,只释放了第一个对象占用的内存。

6.基类指针指向堆上派生类的对象,若基类的析构函数不是虚析构函数,delete指针时,不能释放派生类的资源。

7.删除链表节点时,指针移动顺序出错,导致节点丢失,发生内存泄露。

8.智能指针的交叉引用(后面会专门有一个博客总结智能指针)

9.接口本身要求用户使用后,自己释放内存。例: 
char * p = CString::GetBuffer(); 
CString::ReleaseBuffer(p);

10.打开的fd(文件描述符)没有close。或者中途return或抛出异常,导致close代码未执行,导致fd泄露。

11.僵尸进程。父进程不处理僵尸进程导致进程内核栈泄露。内核栈大小为两个页面(8K)。
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值