首页 > 解决方案 > SDL_FreeSurface 没有释放 RAM / RAM 溢出

问题描述

我认为是一个简单的问题,但我在释放表面时遇到问题,因为即使我将 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++overflowsdlramtruetype

解决方案


您正在释放表面,但并未释放基于它创建的纹理。将此行添加到末尾:

SDL_DestroyTexture(Message);

您还需要关闭字体:

TTF_CloseFont(arial);

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

TTF_Quit();

推荐阅读