【发布时间】:2018-07-01 20:50:18
【问题描述】:
所以我尝试在 SDL 上做点什么,但在第一个程序中我有内存泄漏(idk 泄漏与否)所以有一些代码:
#include <stdio.h>
#include <SDL.h>
#include <SDL_image.h>
#include <SDL_ttf.h>
#define SCREENSIZEX 180
#define SCREENSIZEY 300
SDL_Window* mainwind = NULL;
SDL_Renderer* rend = NULL;
TTF_Font* Usefont = NULL;
int main(int argc, char* argv[])
{
SDL_Init(SDL_INIT_EVERYTHING);
Uint32 windowflags;
windowflags = SDL_WINDOW_SHOWN;
mainwind = SDL_CreateWindow("FooBar",
SDL_WINDOWPOS_CENTERED,
SDL_WINDOWPOS_CENTERED,
SCREENSIZEX,
SCREENSIZEY,
windowflags);
rend = SDL_CreateRenderer(mainwind, -1, SDL_RENDERER_ACCELERATED);
SDL_SetRenderDrawColor(rend, 255, 255, 255, 255);
int imgFlags = IMG_INIT_PNG;
IMG_Init(imgFlags);
TTF_Init();
Usefont = TTF_OpenFont("DOTMBold.TTF",90);
SDL_Surface* TextSurf = NULL;
SDL_Texture* TextTexture = NULL;
SDL_Color UsingColor;
UsingColor.r=0;
UsingColor.g=255;
UsingColor.b=255;
UsingColor.a=100;
bool exit = false;
char Text[500];
int counter = 0;
SDL_Event evneet;
while(!exit)
{
SDL_PollEvent(&evneet);
SDL_RenderClear(rend);
counter++;
TextSurf = TTF_RenderUTF8_Blended(Usefont, Text, UsingColor);
TextTexture = SDL_CreateTextureFromSurface(rend, TextSurf);
SDL_FreeSurface(TextSurf);
TextSurf = NULL;
SDL_RenderCopy(rend, TextTexture, NULL, NULL);
TextTexture = NULL;
SDL_DestroyTexture(TextTexture);
SDL_RenderPresent(rend);
}
SDL_FreeSurface(TextSurf);
TextSurf = NULL;
SDL_DestroyTexture(TextTexture);
SDL_DestroyRenderer(rend);
SDL_DestroyWindow(mainwind);
SDL_Quit();
return 0;
}
问题: some screenshots
想知道如何解决这个问题,并尝试进行大量的释放和内存操作。 这个程序只做一个任务。只计算帧数(在代码中仅显示 0) 这是我第三次尝试进行渲染,但我总是得到相同的结果。 请帮忙!
【问题讨论】:
-
您的图表不一定显示内存泄漏;它具体测量什么?
-
为什么在调用
SDL_DestroyTexture之前将TextTexture设置为NULL? -
为什么要每帧都创建纹理?...这会破坏性能。
-
这是您的实际代码,还是错误的复制粘贴引入了错误(在这种情况下,问题将毫无意义)?如果是,那么这很奇怪,为什么除了在销毁纹理指针之前重置它(这似乎是资源泄漏问题的根源),你还有未初始化的
Text数组和不清楚打破主循环的方法 - 不是显示有问题,但不应忽略SDL_PollEvent返回值。
标签: c rendering sdl sdl-2 sdl-ttf