如何解决SDL2 TTF“释放内存”,但实际上不是“释放内存”
我正在尝试在SDL2 TTF中编辑文本,并且我发现在添加/减去文本时,内存没有减少。问题可能出在SDL_DestroyTexture
和SDL_FreeSurface
中,但它也带来了加载字体的问题。我拥有文本的方式是在文本的第一个实例之后,我加载了所需的字体。然后,当最后一个实例为“免费”时,我关闭字体。这是它的代码(Individual_Characters
是我的文本课,基本上是它们的数组)
加载纹理
void Individual_Characters::Load_Character_Texture(SDL_Renderer *renderer)
{
if (characterTexture != NULL){
SDL_DestroyTexture(characterTexture);
characterTexture = NULL;
}
if (character != "")
{
SDL_Surface *characterSurface = NULL;
if (bold == true){
characterSurface = TTF_RenderText_Blended(fontsBold[fontIndex],character.c_str(),characterColour);
}
if (bold == false){
characterSurface = TTF_RenderText_Blended(fonts[fontIndex],characterColour);
}
if (!characterSurface){
std::cout << "Could not create surface " << SDL_GetError() << std::endl;
}
else{
characterTexture = SDL_CreateTextureFromSurface(renderer,characterSurface);
SDL_FreeSurface(characterSurface);
characterSurface = NULL;
}
SDL_QueryTexture(characterTexture,NULL,&characterRect.w,&characterRect.h);
}
else {
characterRect.w = 0;
characterRect.h = 0;
}
}
设置单个字符
void Individual_Characters::Setup(SDL_Renderer *renderer,std::string p_character,int p_x,int p_y,int p_characterSize,SDL_Colour p_colour,bool p_bold,bool p_clickable,std::string p_fontType)
{
if (setup == false){
characterRect.x = p_x;
characterRect.y = p_y;
character = p_character;
characterFont = p_fontType;
characterSize = p_characterSize;
characterColour = p_colour;
clickable = p_clickable;
bold = p_bold;
fontIndex = characterSize - lowestFontSize -1;
numOfInstances += 1;
if (numOfInstances == 1){
std::cout << "Character instance where initialising fonts " << character << std::endl;
TTF_Init();
fonts.reserve(highestFontSize-lowestFontSize+1);
fontsBold.reserve(highestFontSize-lowestFontSize+1);
for (int i=lowestFontSize; i <= highestFontSize; i++)
{
TTF_Font *currentFont = TTF_OpenFont(characterFont.c_str(),i);
TTF_Font *currentFontBold = TTF_OpenFont(characterFont.c_str(),i);
TTF_SetFontStyle(currentFontBold,TTF_STYLE_BOLD);
fonts.push_back(currentFont);
fontsBold.push_back(currentFontBold);
}
}
Load_Character_Texture(renderer);
}
setup = true;
}
,然后当我“退格”时,我首先称其为 ,然后在Individual_Characters
之后弹出我的向量。
void Individual_Characters::Free_All()
{
if (setup == true){
if (characterTexture != NULL){
SDL_DestroyTexture(characterTexture);
}
if (numOfInstances == 1){
std::cout << "Character instance where closing fonts " << character << std::endl;
for (int i=0; i < fonts.size(); i++){
TTF_CloseFont(fonts[i]);
TTF_CloseFont(fontsBold[i]);
}
fonts.clear();
fontsBold.clear();
TTF_Quit();
}
numOfInstances -= 1;
}
setup = false;
}
numOfInstances
是我拥有Individual_Characters
的多少个实例,当我删除所有现有文本时,输出使我知道字体实际上是封闭的。无论如何。在加载文本之前,程序将位于30mb
ram左右,而字体将加载70mb
ram。很好,但是由于程序使用TTF_CloseFont()
,因此即使释放后内存仍保持70mb。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。