2015-11-04 85 views
0

我正在使用SDL庫進行簡單遊戲的代碼。我有2個對此問題:使用SDL_TTF時,C++程序內存使用量不斷增加

  1. 如果我不把一個斷點,並通過自己讓程序運行,內存使用量會高(如20-30x比年初)。但是,如果我停止循環(遊戲的主循環)並單擊自己,內存使用情況在大約100次點擊(?)後保持不變。爲什麼?

  2. 因此,我決定使用儀器來分析爲什麼因爲我認爲在循環中我可能會添加新元素而不會破壞它。每次我在樂器中創建記錄時,應用程序會持續5秒鐘,然後用崩潰報告關閉(應用程序運行完好,內存內容在xcode中)

    線程0崩潰::調度隊列:com.apple 。主要線程

    0 org.libsdl.SDL2 0x0000000100f5bea9 0x100ee9000 + 470697

    1穗10 0x0000000100ea40cc imageTexture ::渲染()+ 50(imageTexture.cpp:37)

    2穗10 0x0000000100ea2b70 GUI :: renderImage()+ 40(GUI.cpp:140)

    3穗10 0x0000000100ea30b2 GUI ::運行()+ 1258(GUI.cpp:172)

    4穗10 0x0000000100ea439e主+ 36(main.cpp中:15)

    5 libdyld.dylib 0x00007fff8c60f5ad啓動+ 1

這些都是一些代碼,我認爲可能涉及:

對於數3:// imageVector只是一個載體包含所有imageVector指針

SDL_RenderClear(gRenderer); 
for (int i = 0; i < imageVector.size(); i++) { 
    imageVector[i]->render(); 
} 

對於2號:

//set rendering space and render to screen 
SDL_Rect temp = {x, y, width, height}; 
//render to the screen 
SDL_RenderCopy(gRenderer, texture, NULL, &temp); 

經過長期嘗試禁用/啓用代碼四處打聽發生什麼,我仍然不知道什麼是錯的。

這是我目前的循環:

while (true) { 
    textVector[0]->setInput(system->output()); 
    renderImage(); 
    renderText(); 
    SDL_RenderPresent(gRenderer); 
} 

它的某些代碼:

void textTexture::setInput(std::string newText) { 
    gText = newText; 
} 

void GUI::renderImage() { 
    SDL_RenderClear(gRenderer); 
    for (int i = 0; i < imageVector.size(); i++) { 
     imageVector[i]->render(); 
    } 
} 

void GUI::renderText() { 
    for (int i = 0; i < textVector.size(); i++) { 
     textVector[i]->render(); 
    } 
} 

void textTexture::render() { 
    //set rendering space and render to screen 
    SDL_Rect temp = {x, y, width, height}; 

    //recreate the texture 
    createTextureFromRenderedText(gText); 

    //render to the screen 
    SDL_RenderCopy(gRenderer, texture, NULL, &temp); 
} 

void textTexture::createTextureFromRenderedText(std::string text) { 
    if (text != "") { 
     SDL_Surface* textSurface = TTF_RenderText_Blended_Wrapped(gFont, text.c_str(), textColor, 600); 

     if(textSurface == NULL) 
     { 
      printf("Unable to render text surface! SDL_ttf Error: %s\n", TTF_GetError()); 
     } 
     else 
     { 
      //Create texture from surface pixels 
      texture = SDL_CreateTextureFromSurface(gRenderer, textSurface); 
      if(texture == NULL) 
      { 
       printf("Unable to create texture from rendered text! SDL Error: %s\n", SDL_GetError()); 
      } 
      else 
      { 
       //Get image dimensions 
       width = textSurface->w; 
       height = textSurface->h; 
      } 

      //Get rid of old surface 
      SDL_FreeSurface(textSurface); 
     } 
    } 
} 
+0

所以它不是的XCode似乎有資源泄漏,這是你的計劃嗎?您應該編輯標題以反映這一點。 –

+0

@JoachimPileborg好的,我會:)。感謝:D –

+0

你需要給更多的代碼..否則我們無法幫助你。 –

回答

相關問題