SDL_FreeSurface не освобождает RAM / RAM Overflow - PullRequest
2 голосов
/ 17 июня 2020

Простая проблема, я думаю, но у меня проблема с освобождением поверхности, потому что RAM переполняется, даже если я добавляю SDL_FreeSurface () в свой код. Без этой функции 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();

1 Ответ

2 голосов
/ 17 июня 2020

Вы освобождаете поверхность, но не освобождаете текстуру, созданную на ее основе. Добавьте эту строку в конец:

SDL_DestroyTexture(Message);

Вам также нужно будет закрыть свой шрифт:

TTF_CloseFont(arial);

Также рекомендуется закрыть SDL_TTF. Добавьте эту строку непосредственно перед SDL_Quit ();

TTF_Quit();
...