【问题标题】:freeing an SDL_Surface correctly?正确释放 SDL_Surface?
【发布时间】:2016-06-24 04:52:38
【问题描述】:

我可以通过这样做释放我的 SDL_Surface* 冲浪吗:

    SDL_Surface* surf;
    for(int i = 0; i < 5; i++){
         surf = TTF_RenderText_Blended(foofont, foostring, foocolor);
    }
    SDL_FreeSurface(surf);
    surf = NULL;

或者这会导致内存泄漏吗?

【问题讨论】:

  • 您可以看到here 这正是文档建议的内容。
  • @BoBTFish 否定,文档明确释放 每个(唯一的)表面。

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


【解决方案1】:

已编辑:根据我对文档的理解,这将导致泄漏。 看到您基本上调用了该函数 5 次,每次都会创建一个新的表面。即,您每次都需要释放所有表面。 所以

for(int i = 0; i < 5; i++)
{
    surf = TTF_RenderText_Blended(foofont, foostring, foocolor);
    SDL_FreSurface(surf)
}
surf = NULL;

您可以在此处阅读文档:

https://www.libsdl.org/projects/docs/SDL_ttf/SDL_ttf_44.html

https://wiki.libsdl.org/SDL_FreeSurface

【讨论】:

  • 所以它不会产生 3 个新表面而只释放一个?
  • 是的,对不起。我认为这会导致泄漏,是的,扳机有点快。现已编辑回复。
猜你喜欢
  • 2011-05-07
  • 2014-12-17
  • 2011-06-08
  • 2011-06-01
  • 2011-09-09
  • 2010-12-30
  • 2015-11-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多