SDL : Erreur de segmentation (core dumped)

Fermé
zeineb - Modifié le 15 févr. 2020 à 13:41
Bonjour,

j'ai besoin de votre aide avec un problème auquel je suis entrain de confronté
j'ai écrit un petit programme pour un menu de jeu

#include <stdlib.h>
#include <stdio.h>
#include <SDL/SDL.h>
#include <SDL/SDL_image.h>
#include <SDL/SDL_mixer.h>

int main(int argc, char *argv[])
{
int i=0;
 SDL_Surface *ecran =NULL,*background=NULL, *imageDeFond=NULL,*bout1=NULL,*bout2=NULL,*bout3=NULL;
    SDL_Rect positionFond,positionbackground;
    SDL_Rect posib1,posib2,posib3;
    SDL_Rect posicurseur;
SDL_Surface *SDL_GetVideoSurface(void);

    positionFond.x =0;
    positionFond.y =0;
    posib1.x=427;
    posib1.y=214;
    posib2.x=437;
    posib2.y=420;
    posib3.x=383;
    posib3.y=315;

    SDL_Init(SDL_INIT_EVERYTHING);
    ecran = SDL_SetVideoMode(720,720,32,SDL_HWSURFACE);
    SDL_WM_SetCaption("Chargement d'images en SDL", NULL);
    imageDeFond = IMG_Load("M.jpg");
    bout1=IMG_Load("play.jpg");
    bout2=IMG_Load("exit.jpg");
    bout3=IMG_Load("option.jpg");
    SDL_BlitSurface(imageDeFond,NULL,ecran,&positionFond);
    SDL_BlitSurface(bout1,NULL,imageDeFond,&posib1);
    SDL_BlitSurface(bout2,NULL,imageDeFond,&posib2);
    SDL_BlitSurface(bout3,NULL,imageDeFond,&posib3);
    SDL_Flip(ecran);
fprintf(stdout,"hahyvggiiyfytfyt");
//musique
if(Mix_OpenAudio(44100, MIX_DEFAULT_FORMAT, MIX_DEFAULT_CHANNELS, 1024) == -1)
    {
        fprintf(stderr,"%s", Mix_GetError());
    }
Mix_Music *musique;
    musique = Mix_LoadMUS("G3.mp3");
    Mix_PlayMusic(musique,-1);
 Mix_VolumeMusic(MIX_MAX_VOLUME / 1);//MIX_MAX_VOLUME se defere de chaque pc (peut etre 1 ou 2 selement)
    Mix_Music *MB;//pointeur music boutton(chunk se defere de formart) chunk pour format wav ; Music pour format mp3
    MB = Mix_LoadMUS("Click.mp3");// clique de bouton

    SDL_Event event;
    int continuer = 1;
while (continuer)
{
SDL_WaitEvent(&event);

switch(event.type)
{
 case SDL_QUIT:
 continuer = 0;
 break;

 case SDL_MOUSEMOTION:
{
 posicurseur.x=event.motion.x;
 posicurseur.y=event.motion.y;// calculer les coord du curseur


   while((posicurseur.x>=posib1.x && posicurseur.x<=posib1.x+bout1->w) &&(posicurseur.y>=posib1.y &&posicurseur.y<=posib1.y+bout1->h)){ SDL_BlitSurface(imageDeFond,NULL,ecran,&positionFond);//l play tech3el
    SDL_Flip(ecran);//mise a jours
 SDL_Delay(400);//tech3el w tetfa w tehseb bel ms ;ex: SDL_Delay(ms)
 Mix_PlayMusic(MB,-1);} //les cordonnee win bch tenzel b souris(cordonnee mtaa bouton play)


  
  if((posicurseur.x>=posib2.x && posicurseur.x<=posib2.x+bout2->w) &&(posicurseur.y>=posib2.y &&posicurseur.y<=posib2.y+bout2->h)){ SDL_BlitSurface(imageDeFond,NULL,ecran,&positionFond);//settings tech3el
    SDL_Flip(ecran);//mise a jours
 SDL_Delay(400);
 Mix_PlayMusic(MB,-1);//music bref ta3 click ta3 bouton
  }


  
  if((posicurseur.x>=posib3.x && posicurseur.x<=posib3.x+bout3->w) &&(posicurseur.y>=posib3.y &&posicurseur.y<=posib3.y+bout3->h)){ SDL_BlitSurface(imageDeFond,NULL,ecran,&positionFond);//exsit tech3el
    SDL_Flip(ecran);//mise a jours
 SDL_Delay(400);
 Mix_PlayMusic(MB,-1); 
 continuer = 0; }
break;
}
 case SDL_MOUSEBUTTONDOWN:
{
 if(event.button.button==SDL_BUTTON_LEFT)

    { if((posicurseur.x>=posib1.x && posicurseur.x<=posib1.x+bout1->w) &&(posicurseur.y>=posib1.y &&posicurseur.y<=posib1.y+bout1->h))//les cordonnee win bch tenzel b souris(cordonnee mtaa bouton play)
   { SDL_BlitSurface(imageDeFond,NULL,ecran,&positionFond);//l play tech3el
    SDL_Flip(ecran);//mise a jours
 SDL_Delay(400);//tech3el w tetfa w tehseb bel ms ;ex: SDL_Delay(ms)
 Mix_PlayMusic(MB,-1);
 SDL_Surface *SDL_GetVideoSurface(void);
 positionbackground.x=0;
 positionbackground.y=0;
 background = IMG_Load("screen.jpg");//t3ayet lel image ta3 background mangir la bouton la chay
 
 }
 
     break; 
}

}
case SDL_KEYDOWN:
            switch(event.key.keysym.sym)// win teta9ra l click
            {

            case SDLK_RETURN: //bouton entrer
                if (i==1)
                {

                }
                else if (i==2)
                {
                }
                else if (i==3)
                {

                }
                else if (i==4)
                {
                    continuer=0;
                };
                break;

            case SDLK_DOWN:
                i++;
                if(i==5)
                {
                    i=1;
                }
                if(i==1)
                {
                    SDL_BlitSurface(bout1,NULL, ecran, &posib1);
                    SDL_Flip(ecran);
                    SDL_Delay(500);
                    Mix_PlayMusic(MB,-1);
                }
                if(i==2)
                {
                    SDL_BlitSurface(bout2,NULL, ecran, &posib2);
                    SDL_Flip(ecran);
                    SDL_Delay(500);
                    Mix_PlayMusic(MB,-1);
                }
                if(i==3)
                {SDL_BlitSurface(bout3,NULL, ecran, &posib3);
                    SDL_Flip(ecran);
                    SDL_Delay(500);
                    Mix_PlayMusic(MB,-1);
  }
 break;
}
 
 
}

}

     SDL_FreeSurface(imageDeFond);
 SDL_FreeSurface(background); 
 SDL_FreeSurface(bout1);
    SDL_FreeSurface(bout2);
 SDL_FreeSurface(bout3);
    SDL_FreeSurface(ecran);
 Mix_FreeMusic(musique);
 Mix_FreeMusic(MB);
     Mix_CloseAudio();
     SDL_Quit();
return EXIT_SUCCESS;
}


mon problème est lorsque j’exécute le programme une erreur de segmentation s'affiche

Erreur de segmentation (core dumped)

Configuration: Linux / Firefox 73.0