我尝试使用 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/