Я новичок в 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 );
}
Он поднимается линейно до тех пор, пока не останется больше памяти.
TTF_RenderText_Solid
возвращает указатель на новый SDL_Surface.
Вам нужно свободно эта поверхность, когда вы закончите с этим.
В данном конкретном случае, так как ваш текст никогда не меняется, и я думаю, font
а также noir
исправлены ошибки, вы можете один раз инициализировать MESSAGE1 — MESSAGE10 и использовать их повторно, как это предложено Bartlomiej Lewandowski ниже. Тогда вам нужно только освободить поверхности, если вы дойдете до той части вашей программы, где они больше не нужны для отображения.
Других решений пока нет …