SDL_FreeSurface 未释放 RAM / RAM 溢出
SDL_FreeSurface is not freeing RAM / RAM Overflowing
我认为是一个简单的问题,但我在释放表面方面遇到了问题,因为即使我将 SDL_FreeSurface() 添加到我的代码中,RAM 也会溢出。没有这个功能,RAM 就可以了。这段代码中 "free" 有更多内容吗?
此代码试图在屏幕顶部制作文本(乒乓球比赛的分数)。
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();
您正在释放表面,但没有释放基于它创建的纹理。将此行添加到末尾:
SDL_DestroyTexture(Message);
您还需要关闭字体:
TTF_CloseFont(arial);
关闭 SDL_TTF 也是一个好习惯。在 SDL_Quit();
之前添加这一行
TTF_Quit();
我认为是一个简单的问题,但我在释放表面方面遇到了问题,因为即使我将 SDL_FreeSurface() 添加到我的代码中,RAM 也会溢出。没有这个功能,RAM 就可以了。这段代码中 "free" 有更多内容吗? 此代码试图在屏幕顶部制作文本(乒乓球比赛的分数)。
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();
您正在释放表面,但没有释放基于它创建的纹理。将此行添加到末尾:
SDL_DestroyTexture(Message);
您还需要关闭字体:
TTF_CloseFont(arial);
关闭 SDL_TTF 也是一个好习惯。在 SDL_Quit();
之前添加这一行TTF_Quit();