【发布时间】:2021-01-29 12:12:41
【问题描述】:
我试图找出为什么代码不起作用,经过一些测试我发现函数 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*
【问题讨论】:
-
SDL_Rect* rect;需要malloc -
@IrAM 你是什么意思?为什么需要 malloc?
-
@Gabryx86_64 因为它只是一个指针,而且你从来没有让它指向任何分配的对象......所以你不能用它做任何事情并且如果你这样做的话会有未定义的行为。
-
您还应该考虑是否真的要按值传递此类结构,因为它会复制它们,如果它们很大,则没有必要这样做,并且可能会降低性能。为避免复制它们,请通过指向
const的指针传递它们(如果您需要修改任何内容,请删除const)。 -
你很幸运它崩溃了。这种错误会产生各种奇怪的副作用。 :)