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

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

2.调用默认的赋值运算符重载函数,发生浅拷贝现象,导致内存泄露。如下图:
C++总结4——内存泄露/资源泄露

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)。