Gabryx86_64
Gabryx86_64

Reputation: 31

This function cause the window to be blank then crashes

I'm trying to find why thus code doesn't work, and after some testing I found that the function submitSprite has the cause of the crash in it, but I don't know how to fix it

#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 is an SDL_Renderer*

Upvotes: 0

Views: 131

Answers (2)

fhghkjsdhfkhsdfkj
fhghkjsdhfkhsdfkj

Reputation: 1

I can't write a comment, but i'd just like to add, you should make one instance of an SDL_Renderer rather than keep creating one when you need it. As Devolus said, pass by pointer. Passing by value after creating one would also give you a memory leak if you forget to call SDL_DestroyRenderer(), which also adds to the slowness of that method. When you need a renderer, have the parameter SDL_Renderer* renderer

Upvotes: 0

Devolus
Devolus

Reputation: 22084

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);
}

Here you access an pointer which was never initialized. So either use a local variable, or a allocate (and free) memory for it.

i.e.:

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);
}

Upvotes: 2

Related Questions