我遇到了问题,我的应用程序有无限增长的内存泄漏,无法检测到。我做的非常简单的事情是创建一个对象,在该对象上运行一个方法,然后删除该对象。每次执行此操作时,TaskManager中的内存使用量都会增加大约50-100MB。一些运行后,这将耗尽我的全部内存。我通过多线程进行此操作,但是没有静态变量,因此线程中不同对象之间没有冲突。他们仅使用其他对象的静态方法,除了传递参数外,它们不会修改任何其他内存-因此它是线程安全的。
我试图找出原因:
我还能尝试什么来找出我的应用程序泄漏的地方?我在HEAP中找不到任何泄漏,除了析构函数问题之外,我不知道其他任何原因,而析构函数问题可能会导致STACK泄漏(这意味着对象不会破坏本地的std::string对象),已在堆中分配空间)。我不知道是否还有其他原因导致“堆栈泄漏”,但是我知道在我的方法中内存增长最快的部分中,没有HEAP分配。
最佳答案
您可能想使用更好,更耐用的检漏仪。您可能还需要使用一个泄漏检测器,该泄漏检测器可以在程序运行时在不同时间输出堆报告。最后,您应该考虑到问题可能是由于堆碎片而不是泄漏造成的。
您可以尝试从Google免费获得的Visual Leak Detector。
This question包含其他内存检查产品的列表,从基本到相当高级/昂贵的产品。 CRTDBG是最低公分母的解决方案;尽管BoundsChecker并非免费,但我还是很幸运的。