c++ 内存泄漏

13 篇文章 1 订阅

内存泄漏(Memory Leak)是指程序中已动态分配的堆内存由于某种原因程序未释放或无法释放。

内存泄漏的场景

1.malloc和free未成对出现;new/new []和delete/delete []未成对出现;

2.未定义拷贝构造函数或未重载赋值运算符,从而造成两次释放相同内存的做法.

如类中包含指针成员变量,在未定义拷贝构造函数或未重载赋值运算符的情况下,编译器会调用默认的拷贝构造函数或赋值运算符,以逐个成员拷贝的方式来复制指针成员变量,使得两个对象包含指向同一内存空间的指针,那么在释放第一个对象时,析构函数释放该指针指向的内存空间,在释放第二个对象时,析构函数就会释放同一内存空间.

3.没有将基类的析构函数定义为虚函数.
 

解决办法:

1.使用智能指针。见c++ 智能指针auto_ptr (c++98)、shared_ptr(c++ 11)、unique_ptr(c++ 11)、weak_ptr(c++ 11)_baidu_16370559的博客-CSDN博客

判断内存泄漏的办法

a.在Linux系统下,可以使用valgrind、mtrace等内存泄漏检测工具。

参考Linux环境下内存泄露检测_小飞侠hello的博客-CSDN博客

b.在Windows下,用VLD.

参考Windows平台下c++ 内存泄漏检查的办法(如VLD)_baidu_16370559的博客-CSDN博客

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值