程序在调试模式下编译而不是在发布模式下编译时是否有任何原因会泄漏?
(Debug表示调试信息,禁用编译器优化,Release表示无调试信息/全面优化)
看起来就是这样,但我不明白为什么。顺便说一句,净化在这里没有帮助
在调试和发布模式之间切换时,许多指针类型错误(包括内存泄漏)可能会“似乎”出现或消失。 可能有几个原因:
在一个版本或另一个版本中编译的条件代码_CRTDBG_DELAY_FREE_MEM_DF
标志时保留释放的内存。
也有可能你有Release中不存在的内存泄漏。
编辑:您也可以手动调用
HeapCompact(GetProcessHeap(), 0)
。我似乎记得调试堆总是增长(即,它不返回空闲块),但我在任何地方都找不到该文档。
assert (new Object());
如果断言在发布模式下得到优化,可能会导致此行为
有时程序会在一种模式下运行,而在另一种模式下崩溃。
可能导致这种情况的原因是内存损坏(尤其是堆栈损坏)。这可能是存在差异的一个原因。另一个原因可能是调试器没有释放所有内容,但我对此表示怀疑。
顺便说一句,你使用的是 VS 2010 beta 吗?这也可能是测试版中的一个错误。
#define _DEBUG
或者更微妙且可能更难查明的原因造成的 - 即某些不应该被优化的东西。
使用
#define _DEBUG
编译Release,看看是否仍然发生。
#ifdef _DEBUG
线可能是原因之一。