如何解决此功能导致窗口空白然后崩溃
我试图找出为什么这样的代码不起作用,经过一些测试我发现函数 submitSprite 有崩溃的原因,但我不知道如何修复它
#include "renderer.h"
Renderer neWrenderer(SDL_Window* window)
{
Renderer renderer;
renderer.renderer = SDL_CreateRenderer(window,-1,SDL_RENDERER_ACCELERATED);
return renderer;
}
void destroyRenderer(Renderer renderer)
{
SDL_DestroyRenderer(renderer.renderer);
}
void submitSprite(Renderer renderer,Sprite sprite)
{
SDL_Rect* rect;
rect->x=sprite.x;
rect->y=sprite.y;
rect->w=sprite.w;
rect->h=sprite.h;
SDL_Rendercopy(renderer.renderer,sprite.texture,NULL,rect);
}
void render(Renderer renderer)
{
SDL_RenderPresent(renderer.renderer);
SDL_RenderClear(renderer.renderer);
}
renderer.renderer 是一个 SDL_Renderer*
解决方法
void submitSprite(Renderer renderer,Sprite sprite)
{
SDL_Rect* rect;
rect->x=sprite.x;
rect->y=sprite.y;
rect->w=sprite.w;
rect->h=sprite.h;
SDL_RenderCopy(renderer.renderer,sprite.texture,NULL,rect);
}
在这里您访问一个从未初始化的指针。因此,要么使用局部变量,要么为其分配(并释放)内存。
即:
void submitSprite(Renderer renderer,Sprite sprite)
{
SDL_Rect rect;
rect.x=sprite.x;
rect.y=sprite.y;
rect.w=sprite.w;
rect.h=sprite.h;
SDL_RenderCopy(renderer.renderer,&rect);
}
,
我无法写评论,但我想补充一点,您应该创建 one
的 SDL_Renderer
实例,而不是在需要时继续创建。正如 Devolus 所说,通过指针传递。如果您忘记调用 SDL_DestroyRenderer()
,则在创建后按值传递也会导致内存泄漏,这也会增加该方法的速度。当您需要渲染器时,请使用参数 SDL_Renderer* renderer
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。