Shiru
Shiru

Reputation: 17

SDL2 Segmentation fault when trying to Poll Event

I want to create a little program, which should draw some Math Functions.

At first a just wrote the code, that should create a little Window, that should just be visisble until I hit the X at the window.

#include <iostream>
#include <SDL2/SDL.h>

SDL_Window* window;
SDL_Renderer* renderer;
bool running = true;

bool init() {
    if(SDL_Init(SDL_INIT_EVERYTHING) < 0) return false;
    window = SDL_CreateWindow("Visual Functions", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 100, 200, SDL_WINDOW_SHOWN);
    renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED);
    if(window == NULL) return false;
    if(renderer == NULL) return false;
    std::cout << "App and SDL init success" << std::endl;
    return true;
}

void onEvent(SDL_Event* event) {
    switch (event->type)
    {
    case SDL_QUIT:
        running = false;
        break;
    
    default:
        break;
    }
}

void loop() {
    SDL_Event* event;
    while(SDL_PollEvent(event)) onEvent(event);
}

void cleanUp() {
    SDL_DestroyRenderer(renderer);
    SDL_DestroyWindow(window);
    SDL_Quit();
}


int main(int, char**) {
    if(!init()) {
        std::cout << "SDL or/and App init failed" << std::endl;
        exit(-1);
    }

    while(running) loop();

    cleanUp();
}

But the window pops so fast up and again down, that I couldn't even see it and in the command is at first App and SDL init success but then there stands Segmentation fault. In a other code, which has the same Initialization and Loop code runs very well and everything is displayed displayed normally (at least for the SDL part). I found out with some debug messages, that the loop comes not to the Event Function, but also not to the end of the Loop Function, so the problem is SDL_PollEvent(event), but what is the prolem and how to I fix it ?

Upvotes: 0

Views: 710

Answers (1)

Lasersk&#246;ld
Lasersk&#246;ld

Reputation: 2225

You never create the SDL_Event struct that you are using:

void loop() {
    SDL_Event* event;
    while(SDL_PollEvent(event)) onEvent(event);
}

should be this

void loop() {
    SDL_Event event;
    while(SDL_PollEvent(&event)) onEvent(&event);
}

Upvotes: 4

Related Questions