C++内存泄漏自动检测库

Vij*_*jay 6 c++ memory

我正在寻找内存泄漏检测库.像我一样将它包含在源代码中然后它应该开始检测.外部程序可能很好,但我正在寻找一些可以链接到可执行文件的库.
这是我在寻找Windows.

Naw*_*waz 5

您可以在代码中使用一些技术来检测内存泄漏。最常见和最简单的检测方法是定义一个宏(例如 DEBUG_NEW)并使用它,以及预定义的宏(例如__FILE__和 )__LINE__来定位代码中的内存泄漏。这些预定义的宏告诉您内存泄漏的文件和行号。

DEBUG_NEW 只是一个宏,通常定义为:

#define DEBUG_NEW new(__FILE__, __LINE__)
#define new DEBUG_NEW
Run Code Online (Sandbox Code Playgroud)

这样,无论您在哪里使用new,它都可以跟踪文件和行号,可用于定位程序中的内存泄漏。

和是预定义的宏__FILE__,它们分别计算出您使用它们的文件名和行号!__LINE__

阅读以下文章,它非常漂亮地解释了将 DEBUG_NEW 与其他有趣的宏一起使用的技术:

跨平台内存泄漏检测器


来自维基百科

Debug_new是指C++中的一种技术,用于重载和/或重新定义operator new和operator delete,以拦截内存分配和释放调用,从而调试程序的内存使用情况。它通常涉及定义一个名为DEBUG_NEW的宏,并使new成为类似new(_ FILE _, _ LINE _)的东西来记录分配时的文件/行信息。Microsoft Visual C++ 在其 Microsoft 基础类中使用此技术。有一些方法可以扩展此方法,以避免使用宏重新定义,同时仍然能够在某些平台上显示文件/行信息。这种方法有许多固有的局限性。它仅适用于 C++,无法捕获 malloc 等 C 函数的内存泄漏。然而,与一些更完整的内存调试器解决方案相比,它使用起来非常简单,而且速度也非常快。


Fer*_*eak 2

对我来说,这在很长一段时间内都是最好的工具: http://www.paulnettle.com/pub/FluidStudios/MemoryManagers/Fluid_Studios_Memory_Manager.zip 只需包含 1 个头文件即可完成:)