此函数导致 window 为空然后崩溃
This function cause the window to be blank then crashes
我试图找到为什么这样的代码不起作用,经过一些测试我发现函数 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, sprite.texture, NULL, &rect);
}
我无法发表评论,但我想补充一点,您应该创建 SDL_Renderer
的 one
实例,而不是在需要时继续创建实例。正如 Devolus 所说,通过指针传递。如果您忘记调用 SDL_DestroyRenderer()
,则在创建后按值传递也会导致内存泄漏,这也会增加该方法的速度。当你需要渲染器时,有参数 SDL_Renderer* renderer
我试图找到为什么这样的代码不起作用,经过一些测试我发现函数 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, sprite.texture, NULL, &rect);
}
我无法发表评论,但我想补充一点,您应该创建 SDL_Renderer
的 one
实例,而不是在需要时继续创建实例。正如 Devolus 所说,通过指针传递。如果您忘记调用 SDL_DestroyRenderer()
,则在创建后按值传递也会导致内存泄漏,这也会增加该方法的速度。当你需要渲染器时,有参数 SDL_Renderer* renderer