【发布时间】:2010-09-09 04:36:35
【问题描述】:
有人知道发现智能指针引起的内存泄漏的“技术”吗?我目前正在开发一个用 C++ 编写的大型项目,该项目大量使用智能指针和引用计数。显然,我们有一些由智能指针引起的内存泄漏,它们仍然在代码中的某处被引用,因此它们的内存不会被释放。很难找到带有“不必要”引用的代码行,这会导致相应的对象不被释放(尽管它不再使用)。
我在网上找到了一些建议,建议收集引用计数器的递增/递减操作的调用堆栈。这给了我一个很好的提示,哪段代码导致引用计数器增加或减少。
但我需要某种算法,将相应的“增加/减少调用堆栈”组合在一起。删除这对调用堆栈后,我希望(至少)剩下一个“增加调用堆栈”,它向我显示了带有“不必要”引用的代码段,导致相应的对象未被释放。现在修复泄漏问题不大!
但是有人对进行分组的“算法”有想法吗?
在Windows XP下进行开发。
(我希望有人理解,我试图解释的......)
编辑:我说的是循环引用引起的泄漏。
【问题讨论】:
-
不确定我是否理解...您能更具体地引用一种编程语言或平台吗?内存泄漏的处理方式可能会有所不同。
-
智能指针一般指C++/STL。
-
这里有些混乱。我认为值得区分没有指针的分配内存(智能指针不应该发生)、循环引用导致的泄漏,以及由于指针被保留而不必要地延长生命周期的对象。跨度>
标签: c++ pointers memory-leaks smart-pointers