SDL2有内存泄漏吗?

Has SDL2 a memory leak?

我注意到我所有使用 SDL2 的项目都有内存泄漏,所以我写了一个小测试程序,如下所示:

SDL_Init(SDL_INIT_VIDEO);
SDL_Window *win = SDL_CreateWindow("", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 100, 100, SDL_WINDOW_RESIZABLE);
SDL_Renderer *ren = SDL_CreateRenderer(win, 0, 0);

bool running = true;
SDL_Event event;
while (running) {
    while(SDL_PollEvent(&event) != 0) {
        if(event.type == SDL_QUIT) {
            running = false;
        }
    }

    SDL_RenderClear(ren);
    SDL_RenderPresent(ren); //Thanks to keltar 
}
SDL_DestroyRenderer(ren);
SDL_DestroyWindow(win);
SDL_Quit();

我没有注意到这里有任何可能产生泄漏的东西。

我正在使用来自 Xcode 的 Instruments 来检测泄漏。前十秒没有泄漏。在接下来的 10 秒内,将产生大约 15 次泄漏。程序开始后,这种情况会持续 40 秒。从 40 秒开始,没有新的泄漏产生,但分配的内存仍在不断增长。编辑:当我使用 SDL_RenderPresent.

时,内存不再增长

那么 SDL2 是否存在内存泄漏,是我在代码中犯了错误还是 Instruments 造成了一些误报?

可能是因为您没有删除某个对象,或者您正在循环中重新创建它。 SDL2 本身不应该有任何内存泄漏。但是,我强烈建议您使用最新版本(此时为 2.0.10)。请尝试在您的演示程序中绘制一些东西以验证这里没有任何内存泄漏。尝试重复一小部分项目代码以呈现相似的效果。此代码没有任何作用,也无法重现您的问题。但是,如果您发现这里是 SDL2 端的真正内存泄漏,请在这里提交报告 https://bugzilla.libsdl.org/. Before that, please pull most fresh sources from official Mercurial repository https://hg.libsdl.org/SDL/ 并重试您的测试以确认该错误仍然存​​在于主流中。