【发布时间】:2011-06-18 19:50:26
【问题描述】:
我有一个 CRTDBG 报告为没有泄漏的程序,但根据 Windows 任务管理器,随着时间的推移会占用更多内存。更糟糕的是,如果有足够的时间,它会以退出代码 -1 崩溃。
这是一个将成为游戏引擎的程序,现在我正在测试通过快速加载和卸载关卡来卸载关卡的功能。这似乎有效,否则“最后一个”级别的实体会撞到当前的实体。当我“正常”运行程序并加载一个级别而不卸载直到退出时,内存不会增加。
需要注意的是,加载关卡涉及从硬盘读取和打开文件。知道我正在使用 Chipmunk 物理库、Lua 和 OpenGL 可能也很重要。
最棘手的是 CRTDBG 不会转储,它在 main() 结束时返回 0。
编辑:另外,使用 Visual Studio 2008。
【问题讨论】:
-
责备工具通常不会让你有任何收获。证明它,故意泄漏内存并验证它是否被报告。如果检查成功,您将需要分析您的程序以找出它保留数据时间过长的原因。
-
好吧,在 main() 的开头添加一个“new”或“malloc”。所以它可能是某种自动收集,CRTDBG 不工作,或者我没有正确实现它。
标签: c++ memory-leaks