TTF的SDL内存泄漏

SDL memory leak with TTF

本文关键字:泄漏 内存 SDL TTF      更新时间:2023-10-16

我尝试使用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);
}

和文本加载器.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返回指向全新曲面的指针。