我已经将内存泄漏的罪魁祸首归结为文本呈现,并且不明白为什么每2秒钟程序使用的物理内存量上升约0.02 GB。你能帮忙吗?
#include "Text.h"
CText::CText()
{
TTF_Init();
}
CText::~CText()
{
free(mfont);
free(message);
free(tex);
}
void CText::Draw(std::string font, int size, std::string m_text, SDL_Renderer* renderer, int x, int y, SDL_Color color)
{
int w = 0;
int h = 0;
mfont = TTF_OpenFont(("res/" + font + ".ttf").c_str(), size);
message = TTF_RenderText_Solid(mfont, m_text.c_str(), color);
tex = SDL_CreateTextureFromSurface(renderer, message);
SDL_QueryTexture(tex, NULL, NULL, &w, &h);
textRect.x = x;
textRect.y = y;
textRect.w = w;
textRect.h = h;
SDL_RenderCopy(renderer, tex, NULL, &textRect);
TTF_CloseFont(mfont);
}
谢谢..
答案 0 :(得分:5)
每次拨打Draw
时,都会在tex
中创建新的纹理而不会释放前一个纹理。
您的析构函数也是错误的... free
仅适用于使用malloc
(或calloc
或realloc
)分配的内存。由于您未在任何地方使用malloc
,因此您使用free
确实没有业务。
mfont
无效(您可以在Draw()
释放它。tex
应使用SDL_DestroyTexture
释放。message
也应该被SDL_FreeSurface
释放。我认为简短的回答是您只需要阅读,理解并遵循您尝试使用的API的文档。