我遇到了问题,我的应用程序有一个无限增长的内存泄漏,没有被检测到。我所做的非常简化,是创建一个对象,在其上运行一个方法,然后删除该对象。每次我这样做时,TaskManager 中的内存使用量都会增加大约 50-100MB。一些跑步后,这耗尽了我的全部记忆。我通过多线程来做到这一点,但是没有静态变量,所以我的线程中的不同对象之间没有冲突。它们只使用其他对象的静态方法,除了传入参数之外不会修改任何其他内存——因此它是线程安全的。我试图找出原因:
- 使用 crtdbg.h(CRT-Memeory-Leak-Detection),但自我的应用程序启动以来仅存在泄漏 - 它们将在关闭时被删除,并且它们不是那么大。
- 我一直在我继承的所有对象中寻找虚拟析构函数,但它们都可以
我还能尝试找出我的应用程序在哪里泄漏?我在 HEAP 中找不到任何泄漏,除了可能导致堆栈泄漏的析构函数问题之外,我不知道任何其他原因(我的意思是一个对象不会破坏本地 std::string 对象已在堆中分配空间)。我不知道“STACK-Leaks”是否还有其他原因,但我知道在我的方法中,内存增长最多的部分,没有 HEAP 分配。