内存泄漏原分析,内存泄漏的四种解决方案

本文介绍了内存泄漏的四种常见原因及解决方案,包括new操作未释放、虚析构函数使用不当、循环引用及无效缓存机制导致的对象持续增长等问题。文中详细讲解了如何使用Linux下的Valgrind和gdb工具来定位内存泄漏的具体位置,并提到了Windows环境下利用CRT库进行内存泄漏检测的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

内存泄漏原分析,内存泄漏的四种解决方案
new 未释放
虚析构函数与否
循环引用-智能指针
缓存机制没用的对象一直增长。

遇到内存泄漏:

  1. 如何判断有内存泄漏? htop/top -> 怀疑有内存泄漏 mtrace
  2. 如何判断在代码什么位置进行泄漏?

Linux下:
Valgrin内存泄漏检测原理分析:https://zhuanlan.zhihu.com/p/56538645
valgrind分析 或者gdb valgrind对于malloc出来用brk分配的内存检测不出来

  • 简单的 new 未释放 , 通过valgrind直接检查到位置
  • 多次引用计数,通过gdb p出来 指针的usecount里面的return 参数:
    • gdb找引用计数,找到什么时候增加做记录
    • 退出的时候是否释放掉,根据增加、释放的时候找
    • 看数据结构-一层一层的往里面看

windows下:
CRT进行内存泄漏检测
__crtDumpMemeryLeack()
输出窗口找到内存块号{456}
__setBreak…()
设定内存块号
中止-栈帧调试

待更新…

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Ray Song

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值