调试堆内存泄漏检测-奇怪的结果? 我认为我的C++应用程序很紧凑,不会泄漏任何内存。长期运行的压力测试和静态代码分析器似乎也表明了这一点。但是,在执行非常复杂的用法时,Visual Studio 2008内置调试堆将在退出时显示以下警告:
检测到内存泄漏调试堆内存泄漏检测-奇怪的结果? 我认为我的C++应用程序很紧凑,不会泄漏任何内存。长期运行的压力测试和静态代码分析器似乎也表明了这一点。但是,在执行非常复杂的用法时,Visual Studio 2008内置调试堆将在退出时显示以下警告:,c++,visual-studio,visual-studio-2008,memory-leaks,C++,Visual Studio,Visual Studio 2008,Memory Leaks,检测到内存泄漏 正在转储对象-> 0x03397FF8处的{318231}正常块,0字节长。 数据:吕 什么是长度为0字节的内存“泄漏”?我是不是在腐化垃圾堆?什么可能导致调试堆发出这样的警告?在空括号中的值后面看到那些“u”字符令人毛骨悚然。但是看看CRT源代码,这可能是由转储代码中的错误造成的,当内存块为0字节(dbgheap.c中的valbuff变量)时,它似乎不会零终止字符串 否则,分配零字节是受支持的方案。你的代码没有去分配它也不是很神秘。如果可以在“正常块”输出稳定之前获得数字,则可
正在转储对象->
0x03397FF8处的{318231}正常块,0字节长。
数据:吕 什么是长度为0字节的内存“泄漏”?我是不是在腐化垃圾堆?什么可能导致调试堆发出这样的警告?在空括号中的值后面看到那些“u”字符令人毛骨悚然。但是看看CRT源代码,这可能是由转储代码中的错误造成的,当内存块为0字节(dbgheap.c中的valbuff变量)时,它似乎不会零终止字符串
否则,分配零字节是受支持的方案。你的代码没有去分配它也不是很神秘。如果可以在“正常块”输出稳定之前获得数字,则可以在初始化代码中指定_crtBreakAlloc(),以强制设置断点。也可以在CRT调试分配器上设置条件断点。跟踪malloc或新调用以找到它。Argh。没关系,我找到了。静态链接库正在通过新[]分配长度为0的数组。如果它也使用delete[]来杀死它,我想这是可以的。但是,删除调用是有条件的,只有当数组大小>0时才会发生。谢谢您的回答。我会奖励你分数,因为你指出分配0字节实际上是一个有效的方案——这一洞察引导我走上正确的道路。