Я использую SDL и эта функция заставляет мою программу использовать всю мою память

Я новичок в C ++, и эта функция постоянно увеличивает объем памяти моей программы.

Он вызывается в цикле while и никогда не останавливается.

void text_box()
{
SDL_Surface *MESSAGE1 = TTF_RenderText_Solid( font,  "Ligne #1" , noir );
SDL_Surface *MESSAGE2 = TTF_RenderText_Solid( font,  "Ligne #2" , noir );
SDL_Surface *MESSAGE3 = TTF_RenderText_Solid( font,  "Ligne #3" , noir );
SDL_Surface *MESSAGE4 = TTF_RenderText_Solid( font,  "Ligne #4" , noir );
SDL_Surface *MESSAGE5 = TTF_RenderText_Solid( font,  "Ligne #5" , noir );
SDL_Surface *MESSAGE6 = TTF_RenderText_Solid( font,  "Ligne #6" , noir );
SDL_Surface *MESSAGE7 = TTF_RenderText_Solid( font,  "Ligne #7" , noir );
SDL_Surface *MESSAGE8 = TTF_RenderText_Solid( font,  "Ligne #8" , noir );
SDL_Surface *MESSAGE9 = TTF_RenderText_Solid( font,  "Ligne #9" , noir );
SDL_Surface *MESSAGE10 = TTF_RenderText_Solid( font,  "Ligne #10" , noir );
apply_surface( 0, 403, MESSAGE1, SCREEN );
apply_surface( 0, 412, MESSAGE2, SCREEN );
apply_surface( 0, 421, MESSAGE3, SCREEN );
apply_surface( 0, 429, MESSAGE4, SCREEN );
apply_surface( 0, 438, MESSAGE5, SCREEN );
apply_surface( 0, 447, MESSAGE6, SCREEN );
apply_surface( 0, 456, MESSAGE7, SCREEN );
apply_surface( 0, 465, MESSAGE8, SCREEN );
apply_surface( 0, 474, MESSAGE9, SCREEN );
apply_surface( 0, 483, MESSAGE10, SCREEN );
}

Он поднимается линейно до тех пор, пока не останется больше памяти.

0

Решение

TTF_RenderText_Solid возвращает указатель на новый SDL_Surface.

Вам нужно свободно эта поверхность, когда вы закончите с этим.

В данном конкретном случае, так как ваш текст никогда не меняется, и я думаю, font а также noir исправлены ошибки, вы можете один раз инициализировать MESSAGE1 — MESSAGE10 и использовать их повторно, как это предложено Bartlomiej Lewandowski ниже. Тогда вам нужно только освободить поверхности, если вы дойдете до той части вашей программы, где они больше не нужны для отображения.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]