程序似乎泄漏内存,但没有检测到内存泄漏

时间:2015-05-22 08:26:39

标签: c++ memory

我正在研究一个目前有一些内存泄漏的程序,我设法通过编写一个名为Memory的类来修复它们,将它作为我所有其他类的基类,并编写分配并将函数解除分配到Memory类中。每次分配或解除分配存储器时,包括进行呼叫的类和功能的细节将被记录到向量中。这使我能够编写算法来分析结果,并指出我的程序中任何内存泄漏的方向。

我终于达到了分析发现程序没有泄漏的程度(所有记录的分配都有匹配的解除分配)。但是,当我使用预处理器宏禁用Memory功能时(为了确保内存没有被向量用完),我仍然可以找到看起来像是内存泄漏的内容。我这样做是通过在循环中运行测试函数并按照我的方式观察任务管理器:尽管“内存管理”向量不起作用,但内存使用率稳步增加,并且测试在活动时没有返回结果。

通过解决方案范围的搜索,我确保从不使用关键字new,但内存管理功能除外。当调试被取消激活时,所有这些功能都会分配一块新内存并返回地址,就像我直接使用new关键字一样。

我真的只是想知道是否存在某种可能导致程序消耗内存的C ++异常,或者如果它只是我的调试算法中的一个问题导致它错过了泄漏。我可以在必要时发布代码;它有点冗长乏味,但我可以尝试以较小的规模重新创建问题 - 让我知道!

提前感谢任何建议,我知道没有代码就没有多少工作 - 我只是在寻找可能导致这种情况的语言中的任何一种怪癖,而不是 漏洞在我的代码中。同样,如果有必要,我很乐意发布代码。

1 个答案:

答案 0 :(得分:4)

还有其他泄漏内存的方法,例如GDI没有在自己分配的资源上调用DeleteObject。

如果您在Windows上使用Visual Studio,则可以使用CRT的内置内存泄漏检测功能: https://msdn.microsoft.com/en-us/library/x98tx3cf.aspx