c++ - 带有 TTF 的 SDL 内存泄漏

标签 c++ memory-leaks sdl truetype

我尝试使用 SDL 和 TTF 制作一个基本的文本绘图类 但是我有这个巨大的内存泄漏..即使我释放了表面:/

这是 textloader.cpp

void TextLoader::drawStringWithShadow(string str,SDL_Rect rct,SDL_Color clr,SDL_Surface *screen)
{
    SDL_Color black = {0,0,0};
    text = TTF_RenderText_Solid(font,str.c_str(),black);
    rct.x++;
    rct.y++;
    SDL_BlitSurface(text,NULL,screen,&rct);
    rct.x--;
    rct.y--;
    text = TTF_RenderText_Solid(font,str.c_str(),clr);
    SDL_BlitSurface(text,NULL,screen,&rct);
    SDL_FreeSurface(text);
}

和文本loader.h

    #pragma once
#include"includes.h"
class TextLoader
{
public:
    TextLoader(const char *Font,int Size);
    ~TextLoader(void);
    void drawString(string str,SDL_Rect rct,SDL_Color clr,SDL_Surface *screen);
    void drawStringWithShadow(string str,SDL_Rect rct,SDL_Color clr,SDL_Surface *screen);
private:
    SDL_Surface *text;
    TTF_Font *font;
};

我在主循环中调用它

最佳答案

您正在调用 TTF_RenderText_Solid() 两次,但您只释放了使用它创建的表面 text 一次。 在您的第二次通话中:

 text = TTF_RenderText_Solid(font,str.c_str(),clr);

您覆盖了指向前一个表面的指针,从而造成内存泄漏。您执行 SDL_FreeSurface() 第二个表面而不是第一个表面。

备注:TTF_RenderText_Solid返回指向全新表面的指针。

关于c++ - 带有 TTF 的 SDL 内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17531297/

相关文章:

c++ - 用 C++ 编写 Dijkstra 算法

C++ 命名空间歧义

c++ - 在 C++/Linux 中使用 SDL_Mixer 时没有声音

c++ - 使用 SDL 逐像素绘图会导致性能不佳?

c - SDL2 - 纹理和频繁变化的图片

c++ - VC++ 错误 : array instantiation with size from templated static const

c++ - 将 FILE * 或 HANDLE 转换(分配)到 Windows 中的 IStream

c - C 中的 Valgrind 无效的 free()/delete/delete[]/realloc()

memory-leaks - 如何解决 System.Diagnostics.PerformanceCounter 引起的内存泄漏

memory-leaks - 尽管最终确定,Fortran 派生类型数组和内存泄漏