【问题标题】:Problem when trying to find memory leaks by using crtdbg.h尝试使用 crtdbg.h 查找内存泄漏时出现问题
【发布时间】:2022-01-06 14:31:37
【问题描述】:

我第一次尝试使用 CRT 库来检测内存泄漏。我在程序的请求中定义了#define _CRTDBG_MAP_ALLOC。我的程序由类一结构和主要功能组成。在主要功能中,我最后有_CrtDumpMemoryLeaks();。我试着关注这些Instructions

我想获取导致内存泄漏的数据分配行,但我得到如下输出:

Detected memory leaks!  
Dumping objects ->  
{326} normal block at 0x00E02C40, 8 bytes long.   
 Data: <<#      > 3C 23 E0 00 00 00 00 00    
{322} normal block at 0x00E02CB0, 8 bytes long.   
 Data: <L       > 4C 1F E0 00 00 00 00 00  
{318} normal block at 0x00E02AF0, 8 bytes long.  
 Data: < "      > CC 22 E0 00 00 00 00 00  
{312} normal block at 0x00E02A10, 8 bytes long.  
 Data: < $      > FC 24 E0 00 00 00 00 00  
...

我不会在我的程序中的任何地方退出,它总是在 main 中完成。我没有得到分配号的原因是什么?如果需要,我可以添加我的代码。
感谢您的帮助。

【问题讨论】:

  • "#define _CRTDBG_MAP_ALLOC 在程序的开头。"。这不是它应该被使用的方式。它必须在每个 Translation Unit 的开头。例如。在每个 .cpp 文件的第一行,或者在使用 PreCompiled Headers 时,作为 PreCompiled Header 的第一行。
  • @MSalters 是的,抱歉,我忘了说我只有一个 .cpp 文件

标签: c++ memory-leaks crtdbg.h


【解决方案1】:

好的,用我提供的信息无法回答我的问题(对不起)。问题是我有一个基类和派生类。在基类中我没有虚拟析构函数。添加虚拟析构函数解决了我的问题并消除了所有内存泄漏。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-11-09
    • 2013-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多