SDL2 TTF“释放内存”,但实际上不是“释放内存”

如何解决SDL2 TTF“释放内存”,但实际上不是“释放内存”

我正在尝试在SDL2 TTF中编辑文本,并且我发现在添加/减去文本时,内存没有减少。问题可能出在SDL_DestroyTextureSDL_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 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?