我正在使用SDL,这个功能导致我的程序使用我的所有内存

时间:2013-12-15 19:18:47

标签: c++ sdl sdl-ttf

我是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 );
}

以线性方式抬起,直到没有剩余的记忆为止。

1 个答案:

答案 0 :(得分:2)

TTF_RenderText_Solid returns a pointer to a new SDL_Surface.

完成后,您需要free这个表面。

在这种特殊情况下,由于您的文字永远不会改变,并且我猜测fontnoir已修复,您可以将MESSAGE1初始化为MESSAGE10一次,然后重复使用它们,如Bartlomiej Lewandowski所建议的那样下面。然后,如果您到达程序中不再需要显示的部分,则只需要释放曲面。