0

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

它以线性方式上升,直到没有更多的内存。

4

1 回答 1

2

TTF_RenderText_Solid 返回指向SDL_Surface 的指针。

完成后,您需要释放该表面。

font在这种特殊情况下,由于您的文本永远不会改变,而且我猜noir是固定的,您可以初始化 MESSAGE1 到 MESSAGE10 一次,然后重用它们,如下面的 Bartlomiej Lewandowski 建议的那样。然后,如果您到达程序中不再需要显示的部分,则只需要释放表面。

于 2013-12-15T19:20:28.663 回答