我是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 :(得分:2)
TTF_RenderText_Solid
returns a pointer to a new SDL_Surface.
完成后,您需要free这个表面。
在这种特殊情况下,由于您的文字永远不会改变,并且我猜测font
和noir
已修复,您可以将MESSAGE1初始化为MESSAGE10一次,然后重复使用它们,如Bartlomiej Lewandowski所建议的那样下面。然后,如果您到达程序中不再需要显示的部分,则只需要释放曲面。