打印文本导致内存泄漏
Printing text causes memory leak
我想在我的屏幕上为使用 SDL ttf 的游戏打印健康信息,但出现内存泄漏。
游戏开始并运行了一段时间(包括文字和所有内容),但几秒钟后它停止了。
通常你应该在 运行 SDL_RenderCopy 之后释放 textSurface,但即使在这样做之后它似乎仍然不起作用。
(我已经测试了其余代码,发现我只在使用 renderHealth 后才出现内存泄漏,所以我 100% 确定这是导致问题的原因。)
SDLText.h:
class SDLText {
SDL_Surface* textSurface;
SDL_Texture* text;
TTF_Font * font;
...
}
SDLText.cpp:
void SDLText::renderHealth( int health) {
font = TTF_OpenFont("fonts/OpenSans-Regular.ttf", 80);
if (font == NULL) {
printf("font error");
}
std::string score_text = "health: " + std::to_string(health);
SDL_Color textColor = {255, 255, 255, 0};
textSurface = TTF_RenderText_Solid(font, score_text.c_str(), textColor);
text = SDL_CreateTextureFromSurface(gRenderer, textSurface);
SDL_Rect Message_rect; //create a rect
Message_rect.x = 120; //controls the rect's x coordinate
Message_rect.y = 5; // controls the rect's y coordinte
Message_rect.w = 100; // controls the width of the rect
Message_rect.h = 20; // controls the height of the rect
SDL_RenderCopy(gRenderer, text, NULL, &Message_rect);
SDL_FreeSurface(textSurface);
SDL_DestroyTexture(text);
}
谁能告诉我什么不是 seeing/missing?
解决方案:
在最后添加 TTF_CloseFont(font);
后我的问题就解决了。
字体已打开但从未关闭。使用 TTF_CloseFont 释放 font
.
使用的内存
此外,您应该考虑避免每次要渲染时都打开字体。
我想在我的屏幕上为使用 SDL ttf 的游戏打印健康信息,但出现内存泄漏。
游戏开始并运行了一段时间(包括文字和所有内容),但几秒钟后它停止了。
通常你应该在 运行 SDL_RenderCopy 之后释放 textSurface,但即使在这样做之后它似乎仍然不起作用。
(我已经测试了其余代码,发现我只在使用 renderHealth 后才出现内存泄漏,所以我 100% 确定这是导致问题的原因。)
SDLText.h:
class SDLText {
SDL_Surface* textSurface;
SDL_Texture* text;
TTF_Font * font;
...
}
SDLText.cpp:
void SDLText::renderHealth( int health) {
font = TTF_OpenFont("fonts/OpenSans-Regular.ttf", 80);
if (font == NULL) {
printf("font error");
}
std::string score_text = "health: " + std::to_string(health);
SDL_Color textColor = {255, 255, 255, 0};
textSurface = TTF_RenderText_Solid(font, score_text.c_str(), textColor);
text = SDL_CreateTextureFromSurface(gRenderer, textSurface);
SDL_Rect Message_rect; //create a rect
Message_rect.x = 120; //controls the rect's x coordinate
Message_rect.y = 5; // controls the rect's y coordinte
Message_rect.w = 100; // controls the width of the rect
Message_rect.h = 20; // controls the height of the rect
SDL_RenderCopy(gRenderer, text, NULL, &Message_rect);
SDL_FreeSurface(textSurface);
SDL_DestroyTexture(text);
}
谁能告诉我什么不是 seeing/missing?
解决方案:
在最后添加 TTF_CloseFont(font);
后我的问题就解决了。
字体已打开但从未关闭。使用 TTF_CloseFont 释放 font
.
此外,您应该考虑避免每次要渲染时都打开字体。