管理内存泄漏

时间:2017-11-07 22:06:16

标签: c++ memory-management memory-leaks

我正在使用一个看起来内存泄漏非常糟糕的zip / unzip库。

我知道这是一个带有库的内存泄漏因为我已经设法通过仅仅注释库的方法调用来消除泄漏。

虽然库不是那么大,但它是用C语言编写的,并且非常紧凑,有一堆宏,我不想花一周时间弄清楚它是如何工作的,以便修补泄漏。

幸运的是,我只在一个方法中使用该库。是否有可能将引用库的代码包装在一个块中,这些代码块将告诉编译器跟踪该块中的任何堆分配,然后在块退出后释放所有这些分配?与管理堆栈内存的方式类似。它可能不是一个完美的解决方案,但对于我的需求来说,这将是非常好的。

否则这可能是不安全的,但在这种情况下,如果我在块之前分配我需要的任何内存,我应该没有任何问题,因为库被初始化,使用和未初始化几行,并且我提供它指向要解压缩的数据的指针,以及指向已经分配的内存的指针,它可以存储解压缩的数据。

除此之外,您是否知道任何其他可以处理使用C#SharpZipLib创建的zip文件的c ++库,所需的条件是能够直接从内存流压缩和解压缩到另一个内存流中?

1 个答案:

答案 0 :(得分:1)

This MSDN page描述了如何启用Microsoft DEBUG堆,它将提供有关内存泄漏的大量信息 - 包括让您在最终会泄漏的分配上设置断点(假设您的程序行为是确定性/一致的) )。

以这种方式开启:

#define _CRTDBG_MAP_ALLOC
#include <stdlib.h>
#include <crtdbg.h>

并通过添加致电来获取详细报告:

_CrtDumpMemoryLeaks();