Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ SDL2是否存在内存泄漏?_C++_Xcode_Memory Leaks_Sdl_Instruments - Fatal编程技术网

C++ SDL2是否存在内存泄漏?

C++ SDL2是否存在内存泄漏?,c++,xcode,memory-leaks,sdl,instruments,C++,Xcode,Memory Leaks,Sdl,Instruments,我注意到我所有使用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 run

我注意到我所有使用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的仪器来检测泄漏。前十秒钟没有泄漏。在接下来的十秒钟内,大约会产生15处泄漏。这将在程序启动后持续40秒。从40秒开始,不会产生新的泄漏,但分配的内存仍在不断增长。编辑:当我使用SDL_RenderPresent时,内存不再增长


那么SDL2是否存在内存泄漏,是我在代码中犯了错误,还是仪器产生了一些误报?

可能是因为没有删除某个对象,或者是在循环中重新创建了它。SDL2本身不应该有任何内存泄漏。但是,我强烈建议您使用最新版本(目前是2.0.10)。请尝试在您的演示程序中绘制一些东西,以验证这里没有任何内存泄漏。尝试重复项目代码的一小部分,以呈现类似的效果。此代码没有任何功能,无法重现您的问题。但是,如果您发现SDL2端存在真正的内存泄漏,请在此处提交报告。在此之前,请从Mercurial官方存储库中获取最新的源代码,然后重试测试,以确认该漏洞仍然存在于主流中。

可能是因为您没有删除某个对象,或者是在循环中重新创建它。SDL2本身不应该有任何内存泄漏。但是,我强烈建议您使用最新版本(目前是2.0.10)。请尝试在您的演示程序中绘制一些东西,以验证这里没有任何内存泄漏。尝试重复项目代码的一小部分,以呈现类似的效果。此代码没有任何功能,无法重现您的问题。但是,如果您发现SDL2端存在真正的内存泄漏,请在此处提交报告。在此之前,请从Mercurial官方存储库中获取最新的源代码,然后重试测试,以确认该漏洞仍然存在于主流中。

我正在使用…Xcode
这是您的问题:p您没有使用
SDL\u RenderPresent
刷新渲染器。底层渲染器实现(例如opengl)可能会将每个
RenderClear
记录到命令缓冲区中,但刷新不会发生,缓冲区会增长。至于泄漏,你的仪器能提供信息在哪里分配或跟踪吗?@keltar感谢你的技巧,现在内存不再增长。我真的不知道这个内存是什么意思,你有Xcode吗?因为如果你有,我可以从仪器上给你发送一个保存信息。
我正在使用…Xcode
这是你的问题:p您没有使用
SDL\u RenderPresent
刷新渲染器。底层渲染器实现(例如opengl)可能会将每个
RenderClear
记录到命令缓冲区中,但刷新不会发生,缓冲区会增长。至于泄漏,你的仪器能提供信息在哪里分配或跟踪吗?@keltar感谢你的技巧,现在内存不再增长。我真的不知道这个内存是什么意思,你有Xcode吗?因为如果你有,我可以给你发送一个来自仪器的保存。我正在使用SDL2.0.10,我两天前下载了这个版本。我不知道你第一句话是什么意思。我展示了整个源代码。我也不知道为什么你不能复制这些泄露,我可以。奇怪的是,如果我渲染一些东西,所有的泄漏都会消失。你知道为什么吗。当使用OpenGL时,我无法使用SDL函数渲染某些内容。你知道怎么做吗?我正在使用SDL2.0.10,我两天前下载了这个版本。我不知道你第一句话是什么意思。我展示了整个源代码。我也不知道为什么你不能复制这些泄露,我可以。奇怪的是,如果我渲染一些东西,所有的泄漏都会消失。你知道为什么吗。当使用OpenGL时,我无法使用SDL函数渲染某些内容。你知道在那里做什么吗?