当前位置:  开发笔记 > 编程语言 > 正文

查找由智能指针引起的内存泄漏

如何解决《查找由智能指针引起的内存泄漏》经验,为你挑选了2个好方法。

有没有人知道发现智能指针引起的内存泄漏的"技术"?我目前正在开发一个用C++编写的大型项目,该项目大量使用带引用计数的智能指针.显然我们有一些由智能指针引起的内存泄漏,它们仍然在代码中的某处被引用,因此它们的内存不会被释放.很难找到带有"不必要"引用的代码行,导致相应的对象不被释放(尽管它不再使用).

我在网上找到了一些建议,建议收集参考计数器的递增/递减操作的调用堆栈.这给了我一个很好的提示,哪一段代码导致参考计数器增加或减少.

但我需要的是某种算法将相应的"增加/减少调用堆栈"组合在一起.在删除这些调用堆栈之后,我希望(至少)剩下一个"增加调用堆栈",它向我显示带有"不必要"引用的代码段,这导致相应的对象不被释放.现在修复泄漏没什么大不了的!

但有人想知道进行分组的"算法"吗?

开发在Windows XP下进行.

(我希望有人理解,我试图解释......)

EDIt:我说的是循环引用造成的泄漏.



1> paercebal..:

请注意,使用引用计数智能指针的一个泄漏源是具有循环依赖性的指针.例如,A有一个指向B的智能指针,B有一个指向A的智能指针.A和B都不会被销毁.你必须找到,然后打破依赖.

如果可能的话,使用boost智能指针,并将shared_ptr用于应该是数据所有者的指针,而weak_ptr用于不应该调用delete的指针.



2> yrp..:

我这样做的方法很简单: - 在每个AddRef()记录调用堆栈上, - 匹配Release()将其删除.这种方式在程序结束时我留下了AddRefs()而没有加工Releases.无需配对,

推荐阅读
臭小子
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有