SDL_FreeSurface 没有释放 RAM RAM 溢出。

问题描述 投票:1回答:1

我认为问题很简单,但我在释放曲面时遇到了问题,因为即使我在代码中添加了SDL_FreeSurface(),RAM也会溢出。如果没有这个函数,RAM就没有问题。在这段代码中还有什么需要 "释放 "的东西吗?这段代码试图在屏幕上方显示文字(乒乓球游戏的分数)。

    TTF_Init();
    TTF_Font* arial = TTF_OpenFont("arial.ttf", 32);
    SDL_Color msg_color = { 255,255,255 };

    char msg[128];
    sprintf_s(msg, "%d      %d", g_SCORE_P_LEFT, g_SCORE_P_RIGHT);

    SDL_Surface* messageSurface = TTF_RenderText_Solid(arial, msg, msg_color);
    SDL_Texture* Message = SDL_CreateTextureFromSurface(m_game_window_renderer, messageSurface);

    SDL_Rect msg_rect;
    msg_rect.x = 50;
    msg_rect.y = 50;
    msg_rect.w = 30;
    msg_rect.h = 30;

    SDL_RenderCopy(m_game_window_renderer, Message, NULL, &msg_rect);
    SDL_FreeSurface(messageSurface);
    TTF_Quit();
c++ overflow sdl ram true-type-fonts
1个回答
2
投票

你释放了表面,但你没有释放基于它创建的纹理。在结尾处加上这一行。

SDL_DestroyTexture(Message);

你还需要关闭你的字体

TTF_CloseFont(arial);

关闭 SDL_TTF 也是一个好的做法。在SDL_Quit()之前添加这一行。

TTF_Quit();
© www.soinside.com 2019 - 2024. All rights reserved.