c++ - CRT 内存泄漏检测未检测到内存泄漏

标签 c++ multithreading memory-leaks

我遇到了问题,我的应用程序有无限增长的内存泄漏,但未检测到。我所做的非常简单,就是创建一个对象,对其运行一个方法,然后删除该对象。每次执行此操作时,TaskManager 中的内存使用量都会增加大约 50-100MB。经过几次运行后,这耗尽了我的全部内存。我通过多线程来完成此操作,但没有静态变量,因此线程中的不同对象之间不会发生冲突。它们仅使用其他对象的静态方法,除了传入参数之外不会修改任何其他内存 - 因此它是线程安全的。 我试图找出原因:

  • 使用 crtdbg.h (CRT-Memeory-Leak-Detection),但仅存在 self 的应用程序启动以来存在的泄漏 - 它们将在关闭时被删除,而且没有那么大。
  • 我在我继承的所有对象中寻找虚拟析构函数,但它们都没有问题

我还可以尝试什么来找出我的应用程序泄漏的位置?我在堆中找不到任何泄漏,并且除了析构函数问题之外我不知道任何其他原因可能导致堆栈中的泄漏(我的意思是一个对象不会破坏本地 std::string 对象已在堆中分配空间)。我不知道是否还有其他原因导致“STACK-Leaks”,但我知道在我的方法中内存增长最多的部分,没有堆分配。

最佳答案

您可能想要使用更好、更强大的检漏仪。您可能还需要使用泄漏检测器,它可以在程序运行时的不同时间输出堆报告。最后,您应该考虑到您的问题可能是由于堆碎片而不仅仅是泄漏造成的。

您可以尝试Visual Leak Detector Google 提供免费服务。

This question包含其他内存检查产品的列表,从基本到相当先进/昂贵。 CRTDBG 是最小公分母解决方案;我很幸运地使用了 BoundsChecker,尽管它不是免费的。

关于c++ - CRT 内存泄漏检测未检测到内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11524960/

相关文章:

c++ - 将 qDateTimeEdit 限制为 15 分钟

c# - UI线程被阻塞

c++ - 控制 OpenMP 程序中的 FPU 行为?

Python:在第一个函数保持运行的同时运行第二个函数

.net - 在 .net 中创建内存泄漏

c++ - 如何在不可靠的集群上分发程序?

2 个移位图像与 OpenCV 的 C++ 互相关

c++ - 无法打开包含文件 : 'cpprest/http_client.h'

android - 在Activity中使用Android中的lambda会导致内存泄漏吗?

c++ - Visual Studio 2017 在使用 Poco Xml 文档时检测内存泄漏