内存泄漏

什么叫内存泄漏?
内存泄漏一般是指堆内存的泄漏,动态的从堆上申请一块任意大小的内存,使用完没有显式释放内存,导致这块内存不能被再次使用。
有哪些内存泄漏?
1、浅拷贝。对于有指针对象的类,必须有显示的拷贝构造函数。
2、基类指针指向堆上的派生类对象。当通过delete想释放派生类对象的内存时,会导致派生类对象的析构函数无法调用,只调用了基类部分的析构函数,如果此时派生类的析构函数有释放额外系统资源的代码,这会导致内存泄漏。因为delete p这句代码,编译器在编译时进行静态绑定,就只调用基类的析构;当把析构函数写成虚函数后,此处就是动态绑定了,由于你派生类提供了自定义的析构函数,那么虚函数表写的就是派生类析构函数的地址,此时父类的析构函数和子类的析构函数都会执行。
3、new arr[10];
delete arr;//delete []arr;
new和delete,malloc和free应该成对使用,释放对象数组时,要使用delete []arr。
4、僵尸进程没有处理,泄漏内核产生的PCB
5、fd泄漏,没有关闭文件,缓存泄漏
6、socket没有关闭
7、函数返回栈内存。比如函数内部定义了一个数组,却用return语句返回指向数组的指针。函数内部开辟,返回,要自己在外部释放,如果没有释放就会产生内存泄漏。接口本身要求用户使用完指针后自行释放。
8、智能指针交叉引用。
9、构造函数抛出异常,对象构造失败,析构函数不调用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值