C++内存泄漏

1、什么是内存泄露?

内存泄漏(memory leak)是指由于疏忽或错误造成了程序未能释放掉不再使用的内存的情况。内存泄漏并非指内存在物理上的消失,而是应用程序分配某段内存后,由于设计错误,失去了对该段内存的控制,因⽽造成了内存的浪费。

2、内存泄漏的分类:

1.动态内存分配泄露

2.指针失效:指针指向的内存被释放后,指针没有置为 nullptr,导致指针悬空,无法正确释放

3.指针改变指向

4.没有将基类的析构函数定义为虚函数(当基类指针指向子类对象时,如果基类的析构函数不是 virtual,那么子类的析构函数将不会被调用,子类的资源没有正确被释放,因此造成内存泄露。)

5.系统资源泄露(程序使用了系统分配的资源)

  1. 文件句柄泄漏: 如果一个程序打开了一个文件,但在使用完毕后没有关闭文件句柄,就会发生文件句柄泄漏。这会导致系统的文件句柄资源被占用,可能导致其他程序无法正常操作文件,甚至系统达到文件句柄数上限。

  2. 网络连接泄漏: 当程序建立网络连接(比如 SOCKET 连接)时,如果连接在使用完毕后没有关闭,就会导致网络连接泄漏。这可能导致系统的网络资源被浪费,降低网络性能,甚至影响其他程序的网络通信。

3、如何防止内存泄漏?

1.内存的分配封装在类中,构造函数分配内存,析构函数释放内存;

2.智能指针

   智能指针是一种用于管理动态分配内存的工具,它能够自动地在不再需要时释放内存,从而避免内存泄漏。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值