Ceci est juste supposé afficher une image bmp dans le tampon avant de la fenêtre SDL. J'ai joué avec le code. Et je pense qu'il y a quelque chose qui ne va pas avec ma fonction init(). Je suis nouveau à SDL. Mais il doit y avoir un problème avec mes pointeurs ou quelque chose qui me manque sur les fucntions de SDL EDIT: J'ai utilisé GDB et il s'est avéré que ma fonction close() était le problème. Je crois que c'était parce que je libérais de la mémoire qui était définie sur NULL? Je me suis débarrassé de la fonction proche et juste libéré mem après ma fonction de retard.Erreur de segmentation initialisant SDL2. Qu'est-ce que je fais de mal avec la mémoire?
#include <SDL2/SDL.h>
#include <stdio.h>
#include <stdbool.h>
#define SCREENWIDTH 640
#define SCREENHEIGHT 480
SDL_Window *win = NULL;
SDL_Surface *scrn = NULL;
SDL_Surface *mscrn = NULL;
bool init()
{
bool suc = true;
char name[11] = "Hello SDL";
if (SDL_Init(SDL_INIT_VIDEO) != 0) {
printf("%s", SDL_GetError());
suc = false;
}
win = SDL_CreateWindow(name, SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, SCREENWIDTH, SCREENHEIGHT, SDL_WINDOW_SHOWN);
if (win == NULL) {
printf("%s", SDL_GetError());
suc = false;
}
scrn = SDL_GetWindowSurface(win);
return suc;
}
bool loadmedia()
{
bool suc = true;
mscrn = SDL_LoadBMP("hello_world.bmp");
if (mscrn == NULL) {
printf("%s", SDL_GetError());
suc = false;
}
return suc;
}
void close()
{
SDL_FreeSurface(mscrn);
SDL_DestroyWindow(win);
SDL_Quit();
}
int main(int argc, char* args[])
{
if (!init()) {
close();
return 1;
}
if (!loadmedia()) {
close();
return 1;
}
SDL_BlitSurface(mscrn, NULL, scrn, NULL);
SDL_UpdateWindowSurface(win);
SDL_Delay(3000);
close();
return 0;
}
Qu'est-ce que votre compilateur vous dit à propos de 'close()'? – EOF
Qu'est-ce que «close» est censé faire, de toute façon? –
Wild deviner: Si SDL_Init échoue, vous message (et ne le voyez jamais parce qu'il n'y a pas de saut de ligne et donc pas de vidage implicite), mais alors marchez et essayez de créer une fenêtre de toute façon. De même avec la surface des fenêtres. Un * débogueur * est dans le menu à ce stade. – WhozCraig