C++ 增加内存使用而不泄漏?

C++ 增加内存使用而不泄漏?,c++,memory-leaks,C++,Memory Leaks,我有一个程序,CRTDBG报告没有泄漏,但据Windows任务管理器称,随着时间的推移,它会占用更多内存。更糟糕的是,如果有足够的时间,它将崩溃,退出代码为-1 这是一个将成为游戏引擎的程序,现在我正在测试通过快速加载和卸载关卡来卸载关卡的功能。这似乎是可行的,否则“最后”级别的实体将与当前的实体碰撞。当我“正常”运行程序并加载一级而不卸载直到退出时,内存不会增加 可能需要注意的是,加载一个级别需要从硬盘读取并打开一个文件。知道我正在使用花栗鼠物理库、Lua和OpenGL可能也很重要 最棘手的是

我有一个程序,CRTDBG报告没有泄漏,但据Windows任务管理器称,随着时间的推移,它会占用更多内存。更糟糕的是,如果有足够的时间,它将崩溃,退出代码为-1

这是一个将成为游戏引擎的程序,现在我正在测试通过快速加载和卸载关卡来卸载关卡的功能。这似乎是可行的,否则“最后”级别的实体将与当前的实体碰撞。当我“正常”运行程序并加载一级而不卸载直到退出时,内存不会增加

可能需要注意的是,加载一个级别需要从硬盘读取并打开一个文件。知道我正在使用花栗鼠物理库、Lua和OpenGL可能也很重要

最棘手的是CRTDBG如何不转储,它在main()的末尾返回0


编辑:另外,使用Visual Studio 2008。

对我来说,听起来你并不是真的在泄漏内存,只是分配了大量内存,然后在出口处释放内存


也许您保留了一些对象列表,但在加载每一级时忘记了释放/删除这些对象?

可能是您正在观察“智能”分配器的效果,该分配器要求操作系统提供大块内存和子分配。您可以通过替换全局
运算符new
运算符delete
进行检查。如果这些消息告诉您,所有分配的内存也被释放,而进程的内存消耗却在上升或保持在上升状态,那么(很可能)是分配器。

Lua的垃圾收集器会在需要时进行收集。如果您没有明确地命令Lua进行收集,那么内存可能会在那里累积,而没有实际使用。

责怪该工具通常不会让您取得任何效果。证明它,故意泄漏内存并验证它是否被报告。如果这样,您需要分析您的程序,找出它为什么会保留数据太长时间。那么,在main()的开头粘贴一个“new”或“malloc”。所以它可能是某种自动收集,CRTDBG不工作,或者我没有正确实现它。强制垃圾收集器以与级别加载相同的频率运行并不会停止它。