gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:54:47 25 4
gpt4 key购买 nike

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

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

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

最佳答案

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

你可以试试Visual Leak Detector Google 免费提供。

This question包含其他内存检查产品的列表,从基本的到非常高级/昂贵的。 CRTDBG 是最小公分母解决方案;尽管 BoundsChecker 不是免费的,但我很幸运。

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com