我注意到我所有使用 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/ .在此之前,请从官方 Mercurial 存储库中提取最新的资源 https://hg.libsdl.org/SDL/并重试您的测试以确认错误仍然存在于主流中。
关于c++ - SDL2有内存泄漏吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57494515/