2015-11-04 117 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

你需要给更多的代码..否则我们无法帮助你。 –

回答

相关问题