Bonjour,
Voilà le problème: Je souhaite factoriser la création d’une fenêtre en SDL2 à l’aide d’une fonction. Bien entendu cela ne marche pas, GCC me vomi dessus (SegFault). Le problème selon GDB vient de la ligne 20. Je sais pourquoi cela ne marche pas mais je ne sait pas comment résoudre le problème.
Comment faut-il passer un pointeur de type SDL_Window* ou autre dans les arguments d’une fonction et quel en doit être ses paramètres afin que le pointeur de la fonction main soit modifié ? J’ai à peu près tout essayé même un pointeur de pointeur mais cela ne fonctionne pas.
Options de compilation: gcc hellodsl.c -g -Wall -Wextra -pedantic -O2 -ansi -lSDL2 -o hellosdl
Voici le code:
Hellosdl.c (La librairie SDL2 est définie dans son header qui ne fait que prototyper les fonctions)
#include "hellosdl.h"
/* Screen dimension constants */
const int SCREEN_WIDTH = 640;
const int SCREEN_HEIGHT = 480;
int main(void)
{
SDL_Window* mainWindow = NULL;
SDL_Surface* mainWindowSurface = NULL;
if(initSDL(SDL_INIT_VIDEO) < 1)
return EXIT_FAILURE;
if(createWindow(mainWindow, "Hello SDL", 0, 0, SCREEN_WIDTH, SCREEN_HEIGHT, SDL_WINDOW_SHOWN) < 1)
return EXIT_FAILURE;
/* Fill the surface white */
mainWindowSurface = SDL_GetWindowSurface(mainWindow);
SDL_FillRect(mainWindowSurface, NULL, SDL_MapRGB(mainWindowSurface->format, 0xFF, 0xFF, 0xFF));
/* Update the surface */
SDL_UpdateWindowSurface(mainWindow);
/* Wait two seconds */
SDL_Delay(2000);
/* Destroy window */
SDL_DestroyWindow(mainWindow);
/* Quit SDL subsystems */
SDL_Quit();
return EXIT_SUCCESS;
}
void displayError(const char* title, SDL_Window* window)
{
if(SDL_ShowSimpleMessageBox(SDL_MESSAGEBOX_ERROR, title, SDL_GetError(), window) < 0)
fprintf(stderr, "SDL error occured: %s\n", SDL_GetError());
}
int initSDL(Uint32 flag)
{
if(SDL_Init(flag) < 0)
{
displayError("SDL Initialization Error", NULL);
return 0;
}
return 1;
}
int createWindow(SDL_Window* window, const char* title, int x, int y, int w, int h, Uint32 windowFlag)
{
window = SDL_CreateWindow(title, x, y, w, h, windowFlag);
if(window == NULL)
{
displayError(title, NULL);
return 0;
}
return 1;
}
Merci d’avance !