我對C/C SDL庫++和 我有這樣的方法寫在屏幕上的文字工作:TTF_RenderText_Solid使我公羊的增加,直到2GB和返回NULL
//string, pos.x and pos.y
void writeText(int x, int y, char *str)
{
SDL_Surface* textSurface;
SDL_Texture *mTexture;
SDL_Color textColor = { 0XFF, 0XFF, 0XFF };
SDL_Rect src, dst;
SDL_Renderer* gRenderer = getRenderer();
textSurface = TTF_RenderText_Solid(font, str, textColor);
mTexture = SDL_CreateTextureFromSurface(gRenderer, textSurface);
src.x = 0; dst.x = x;
src.y = 0; dst.y = y;
src.w = dst.w = textSurface->w;
src.h = dst.h = textSurface->h;
SDL_RenderCopy(gRenderer, mTexture, &src, &dst);
}
我用這個方法的主要功能在內部儘可能寫入球員得分。這使得內存從20MB(不使用此方法)增加到2024MB(使用此方法),然後返回「讀取訪問衝突」。我認爲問題在於這種方法在每次do-while迭代中創建一個對象,並且在沒有控制的情況下增加內存。
我怎樣才能繞過這個?
我是新手與C指針,我想是這樣的重用textSurface無需在每個迭代上創建一個新的對象:
SDL_Surface textSurfaceCreate() {
SDL_Surface textSurface;
return textSurface;
}
上主,叫像
SDL_Surface textSurface = textSurfaceCreate();
和內do-while:
writeText(SDLSurface* textSurface, int x, int y, char *str);
但是當我編譯時,Visual Studio給了我一些錯誤。
謝謝。我已經部分解決了問題。我使用了SDL_DestroyTexture(),並且內存增加速度比上一代碼慢。 SDL_DestroySurface()不存在。我可以用另一個C/C++函數刪除SDL_Surface *嗎?謝謝。 –
好,我解決它。我已經使用SDL_FreeSurface()作爲SDL_Surface *。 –