【问题标题】:SDL2 memory leaks on SDL_DestroyRendererSDL_DestroyRenderer 上的 SDL2 内存泄漏
【发布时间】:2026-01-29 18:45:01
【问题描述】:

这段代码将解释剧情:

// on init:

m_mainWindow = SDL_CreateWindow("title", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 480, 640, SDL_WINDOW_SHOWN);
m_mainRenderer = SDL_CreateRenderer(m_mainWindow, -1, 0); // + 8 Mb of memory

// on screen resize when my ios sends SDL_WINDOWRESIZED:
SDL_DestroyRenderer(m_mainRenderer); // - 1!!! Mb of memory

m_mainRenderer = SDL_CreateRenderer(m_mainWindow, -1, 0); // + 6 Mb of memory

我无法完全销毁渲染器并清除它的内存。为什么?以及我在这里做错了什么?

【问题讨论】:

  • 试试循环调用,内存占用会不会增加?
  • 题名有误导,我觉得不能叫内存泄漏。很可能是某些系统(或 SDL)内存分配诡计。
  • 如何测量内存变化??
  • 您使用的是 C 还是 C++?根据代码示例,它似乎是 C。不管 请不要同时标记 C 和 C++ 的问题,每种语言都有非常不同的答案
  • 我在会话中做了几次,仅通过这个操作它就从 38 Mb 增长到 600+。使用任务管理器查看内存活动并使用 C++ 编写。对不起标签。我是*的新手,它以某种方式自动标记了我的问题。

标签: c++ memory memory-leaks sdl sdl-2


【解决方案1】:

您不需要在每次调整大小时都创建渲染器,您的渲染器大小会自动更新...基本上,您可以在软件中只使用一个渲染器来完成所有操作。顺便说一句,SDL_Renderer 不包含维度属性,窗口包含它,并且 SDL_Renderer 链接到该窗口

【讨论】: