我注意到我所有使用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是否存在内存泄漏,是我在代码中犯了错误,还是仪器产生了一些误报?
发布于 2019-08-14 21:15:17
这可能是一些错误,你没有删除某个对象,或者你正在循环中重新创建它。SDL2本身不应该有任何内存泄漏。但是,我强烈建议您使用最新的版本(目前是2.0.10)。请尝试在您的演示程序中绘制一些东西,以验证这里没有任何内存泄漏。尝试重复项目代码的一小部分,以呈现类似的效果。这段代码什么也不做,也不能重现你的问题。但是,如果你发现这里是一个真正的内存泄漏的SDL2端,请提交一个报告在这里https://bugzilla.libsdl.org/。在此之前,请从官方Mercurial存储库https://hg.libsdl.org/SDL/中提取最新的源代码,并重试您的测试,以确认该错误仍然存在于主流中。
https://stackoverflow.com/questions/57494515
复制相似问题