代码之家  ›  专栏  ›  技术社区  ›  BuschnicK

调试堆内存泄漏检测-奇怪的结果?

  •  1
  • BuschnicK  · 技术社区  · 16 年前

    我认为我的C++应用程序很紧凑,不会泄漏任何内存。长期运行的压力测试和静态代码分析器似乎也表明了这一点。但是,在执行非常复杂的用法szenario时,Visual Studio 2008内置调试堆将在退出时显示以下警告:

    检测到内存泄漏!
    倾倒物体->

    什么是0字节长度的内存“泄漏”?我是不是在破坏这堆东西?什么可能导致调试堆发出这样的警告?

    2 回复  |  直到 16 年前
        1
  •  2
  •   Hans Passant    16 年前

    在空括号中的值后面看到那些“u”字符让人毛骨悚然。但是看一下CRT源代码,这可能是由转储代码中的一个bug所解释的,当内存块为0字节时,它似乎不会以零终止字符串(dbgheap.c中的valbuff变量)。

    否则,分配零字节是受支持的方案。你的代码没有取消分配它也不是很神秘。如果您可以在“正常块”输出稳定之前获得数字,那么您可以在初始化代码中分配\u crtBreakAlloc()以强制断点。或者可以在CRT调试分配器上设置条件断点。追踪malloc或新调用以找到它。

        2
  •  1
  •   BuschnicK    16 年前

    啊。不管我怎么找到它。静态链接库正在通过new[]分配长度为0的数组。如果它也使用delete[]来杀死它,我想这是可以的。但是,delete调用是有条件的,仅当array size>0