为什么我的程序使用的内存在运行时会不断增长?

时间:2013-04-17 13:56:33

标签: c++ memory 2d sdl game-engine

从第一次搜索到这一点,我发现一些消息来源说我可能有内存泄漏。但是当我搜索关于内存泄漏是什么的详细信息时,它说当我使用“新”并且不使用“删除”时我会发生但我甚至没有在我的整个程序中使用新的一次所以我假设这意味着问题是别的。我没有任何增长的数组或其他任何我能想到的会导致这种情况。在程序初始化之后我会想象在那之后它不会改变,但是我会增长,并且很快就可以添加。

程序非常大,所以我不认为在这里粘贴这一切都是个好主意。也许只是一些可能导致这种情况的一般性想法可以帮助我知道在哪里看。

只是为了给出一个想法,该应用程序是一个2d侧卷轴,就像超级马里奥世界

2 个答案:

答案 0 :(得分:1)

由于您使用SDL,我怀疑分配来自SDLIMG_Load等来电中的SDL_LoadWave。根据经验,当API为您提供指针时,这意味着您还必须要求API释放它。

SDL_Surface为例,调用IMG_Load(或任何其他API函数来分配图像)将分配内存。您需要在每个SDL_FreeSurface上手动呼叫SDL_Surface,以便在完成记忆后释放内存。

SDL中的所有其他资源都是一样的。

答案 1 :(得分:0)

我看到你将SDL作为你的标签之一,所以我假设这个2D游戏正在使用该库。

如果是这种情况,则很可能使用其中一个库功能可以动态分配内存。

如果您正在为Mac OS X开发,可以使用Xcode捆绑的免费工具,名为Instruments;这有一个用于识别内存泄漏的模板。

如果您正在为Windows开发,那么您可以使用许多工具,其中一个是英特尔的Parallel Studio,它内置了内存分析工具,但它不是免费的。

观察内存使用情况的另一个选择可能是使用跨平台Google C ++测试框架。此框架允许您测试部分代码,以便您可以看到对SDL的调用会导致内存快速增长。