几天前我发布了有关智能指针的内存泄漏的信息。现在我能够找出哪些对象正在泄漏内存,但我无法从它们泄漏内存的位置找出它。
我正在使用与此处提到的相同的代码检测引用计数对象中的内存泄漏
我读过很多评论,但没有一个正确解释。我尝试使用宏 FILE 和 LINE ,它们都打印文件和 refmanager 类的行。
有没有调试此问题的好方法。也请指出一些很好的例子。
最简单的方法可能是在Windows上使用Valgrind(在Linux和Mac上)和一些类似的工具。
你也可以在智能指针的构造函数中获取回溯(在 Linux 和 Mac 上使用函数 backtrace() 函数)或来自 dbghelp.dll 的类似函数,然后在分配时将回溯保存在某个地方,并在解除分配时删除回溯。然后在退出时打印所有剩余的回溯。
在 Windows 上,您可以使用 Visual Studio 2015 中的新内存诊断工具:
- http://blogs.msdn.com/b/vcblog/archive/2015/10/21/memory-profiling-in-visual-c-2015.aspx