关于c4a sdl2 闪退问题(问,求答)
c4droid吧
全部回复
仅看楼主
level 8
color371 楼主
本人第一次发帖,多多指教……
大家用c4a运行如下代码能挺多久?我的手机挺了15k多,这种闪退避免?
#include "SDL2/SDL.h"
#include "SDL2/SDL_ttf.h"
SDL_Window *Window = NULL;
SDL_Renderer *Renderer = NULL;
SDL_Texture *Texture = NULL;
SDL_Surface *Surface = NULL;
int i=0;
int Init()
{
SDL_Init(SDL_INIT_VIDEO);
// 创建窗口
Window = SDL_CreateWindow("SDL_Window", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 240, 400, SDL_WINDOW_SHOWN);
if (Window == NULL)
return -1;
Renderer = SDL_CreateRenderer(Window, -1, SDL_RENDERER_ACCELERATED);
if (Renderer == NULL)
return -2;
return 0;
}
void t(int x, int y, const char *text)
{
TTF_Init();
TTF_Font *font = NULL;
int w = 0, h = 0;
font = TTF_OpenFont("f.ttf", 28);
SDL_Color color;
color.r = 0xff;
color.g = 0;
color.b = 0;
color.a = 0xff;
Surface = TTF_RenderUTF8_Blended(font, text, color);
w = Surface->w;
h = Surface->h;
Texture = SDL_CreateTextureFromSurface(Renderer, Surface);
TTF_CloseFont(font);
SDL_Rect Box;
Box.x = x;
Box.y = y;
Box.w = w;
Box.h = h;
SDL_RenderCopy(Renderer, Texture, NULL, &Box);
TTF_Quit();
}
void Destroy()
{
SDL_FreeSurface(Surface);
SDL_DestroyWindow(Window);
SDL_DestroyTexture(Texture);
SDL_DestroyRenderer(Renderer);
SDL_Quit();
}
int main(int args, char *argv[])
{
//初始化
if (Init() != 0)
return -1;
char str[80];
while (1) {
//清理渲染器
SDL_RenderClear(Renderer);
i++;
sprintf(str, "time:%d", i);
t(0, 170, str);
//刷新
SDL_RenderPresent(Renderer);
//SDL_Delay(1);
}
Destroy();
return 0;
}
2018年03月18日 06点03分 1
level 14
需要保证没有引用空指针,比如font,Surface,Texture
2018年03月18日 10点03分 2
level 7
没有SDL_Delay吧
2018年03月18日 11点03分 6
level 8
color371 楼主
//SDL_Delay(1);是为了加速过程,等到15k用了两三分钟,,,指针都正常(的吧)程序能跑,但跑久了会闪退。
2018年03月18日 11点03分 8
level 8
color371 楼主
为什么我发的文件(百度网盘)连接都自动消失啊?
f.ttf发不上,有意者自行寻找一个代替吧。。。
手机自带的"/system/fonts/DroidSansFallback.ttf"
2018年03月18日 11点03分 9
level 14
应该是你循环不断创建Texture耗光内存才挂的吧
2018年03月18日 12点03分 10
有道理 #define 创建 Texture = SDL_CreateTextureFromSurface(Renderer, Surface); DXKite的nc5.2(触屏事件)跑3千出头; 我自己的程序用了大量的 创建 也跑2500; 而且texture是全局变量且唯一 创建 只是完成转换并不会占用新的内存(的吧)
2018年03月18日 12点03分
@color371 你只创建却不及时销毁,你应该知道有“内存泄漏”这个词吧
2018年03月18日 15点03分
@不知者来此 谢谢,你说对了,我在t(){}写了创建和销毁后成功继续跑了(之前不知道它回占用新内存),谢谢层主帮助。
2018年03月19日 02点03分
@color371 Surface也是
2018年03月19日 03点03分
1