Partage
  • Partager sur Facebook
  • Partager sur Twitter

Probleme avec la sdl

    20 mars 2006 à 10:35:36

    J'ai un petit probleme avec la sdl mais je c'est pas pourquoi

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

    void pause();

    int main(int argc, char *argv[])
    {
        SDL_Surface *ecran = NULL;
        SDL_Surface *lol[3] = {NULL};
        SDL_Rect position;
        Uint32 couleur[3] = {0};
        int i = 0;
       
        SDL_Init(SDL_INIT_VIDEO);
       
        ecran = SDL_SetVideoMode(512,512,32,SDL_HWSURFACE | SDL_DOUBLEBUF);
        for(i =0; i<= 2; i++);
              {
              lol[i] = SDL_CreateRGBSurface(SDL_HWSURFACE, (i+1)*100, (1+i)*100 ,32,0,0,0,0);
              if(lol[i] == NULL)
                {
                fprintf(stderr,"probleme de création des surfaces : \n %s", SDL_GetError);
                }
              }
           
        couleur[0] = SDL_MapRGB(ecran->format , 255 , 0 , 0);
        couleur[1] = SDL_MapRGB(ecran->format , 0 , 0 , 255);
        couleur[2] = SDL_MapRGB(ecran->format , 0 , 255 , 0);
       
        for(i = 0; i<=2; i++)
          {
          SDL_FillRect(lol[i], NULL, couleur[i]);
          position.x = (512 - (1+i)*100) / 2;
          position.y = (512 - (1+i)*100) / 2;
       
          SDL_BlitSurface(lol[i], NULL, ecran, &position );
          }
       
        pause();
        for(i = 0;i<=2;i++)
            SDL_FreeSurface(lol[i]);
           
        SDL_Quit();

        return EXIT_SUCCESS;
    }

    void pause()
    {
        int continuer = 1;
        SDL_Event event;

        while (continuer)
        {
            SDL_WaitEvent(&event);
            switch(event.type)
            {
                case SDL_QUIT:
                    continuer = 0;
            }
        }
    }




    En fait le code devrait ouvrir une fenetre, dans cette fenetre il doit y avoir 3 carre un sur l'autre et de couleur différente mais quand je compile le code ben il se lance mais se referme tout de sutie et un fichier stderr est créer avec ecrit ca dedans

    Fatal signal: Segmentation Fault (SDL Parachute Deployed)
    • Partager sur Facebook
    • Partager sur Twitter
      20 mars 2006 à 11:22:36

      après ton premier for, il y a un ; donc il ne fait pas la boucle for et tu sors de ton tableau !

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

      void pause();

      int main(int argc, char *argv[])
      {
          SDL_Surface *ecran = NULL;
          SDL_Surface *lol[3] = {NULL};
          SDL_Rect position;
          Uint32 couleur[3] = {0};
          int i = 0;
         
          SDL_Init(SDL_INIT_VIDEO);
         
          ecran = SDL_SetVideoMode(512,512,32,SDL_HWSURFACE | SDL_DOUBLEBUF);

          for(i =0; i<= 2; i++)
                {
                lol[i] = SDL_CreateRGBSurface(SDL_HWSURFACE, (i+1)*100, (1+i)*100 ,32,0,0,0,0);
                if(lol[i] == NULL)
                  {
                  fprintf(stderr,"probleme de création des surfaces : \n %s", SDL_GetError);
                  }
                }
             
          couleur[0] = SDL_MapRGB(ecran->format , 255 , 0 , 0);
          couleur[1] = SDL_MapRGB(ecran->format , 0 , 0 , 255);
          couleur[2] = SDL_MapRGB(ecran->format , 0 , 255 , 0);
         
          for(i = 0; i<=2; i++)
            {
            SDL_FillRect(lol[i], NULL, couleur[i]);
            // RAJOUT POUR VOIR LES 3 CARRES
            SDL_SetAlpha(lol[i], SDL_SRCALPHA, 128);
            position.x = (512 - (1+i)*100) / 2;
            position.y = (512 - (1+i)*100) / 2;
         
            SDL_BlitSurface(lol[i], NULL, ecran, &position );
            }
         
          pause();
          for(i = 0;i<=2;i++)
              SDL_FreeSurface(lol[i]);
             
          SDL_Quit();

          return EXIT_SUCCESS;
      }

      void pause()
      {
          int continuer = 1;
          SDL_Event event;

          while (continuer)
          {
              SDL_WaitEvent(&event);
              switch(event.type)
              {
                  case SDL_QUIT:
                      continuer = 0;
              }
          }
      }
      • Partager sur Facebook
      • Partager sur Twitter
        20 mars 2006 à 12:14:47

        bonjour tout le monde

        plutôt que de créer un nouveau topic je poste sur celui là.

        voilà mon code est à peu près( parce que je l'ai fait avant et modifié selon celui de mat :p ) le même que m@teo21 mais il y a une erreur. quand je compile il le mets 0 errors , 0 warnings et process termined wirh statut 1 .Une fenetre s'ouvre mais se referme tout de suite.

        Merci à ceux qui peuvent m'aider.
        #include <stdlib.h>
        #include <stdio.h>
        #include <SDL/SDL.h>

        void pause();

        int main(int argc, char *argv[])
        {
            SDL_Surface *ecran = NULL , *ligne[256] = {NULL};
            SDL_Rect position_degrade;

            int i;

            SDL_Init(SDL_INIT_VIDEO);

            ecran = SDL_SetVideoMode(400,256,32,SDL_HWSURFACE);



            for( i = 0 ; i < 255;i++)
            {
                    ligne[i] =  SDL_CreateRGBSurface(SDL_HWSURFACE, 400 , 1 , 32 , 0, 0, 0, 0);
            }

            SDL_WM_SetCaption("mon dégradé",NULL);

            SDL_FillRect(ecran , NULL ,SDL_MapRGB(ecran->format, 0, 0, 0));

            for(i = 0; i <= 255;i++)
            {
                    position_degrade.x = 0;
                    position_degrade.y = i;

                    SDL_FillRect(ligne[i],NULL,SDL_MapRGB(ecran->format,i,i,i));

                    SDL_BlitSurface(ligne[i] , NULL , ecran ,&position_degrade);
            }


            pause();

            for(i = 0 ; i < 255 ; i++)
            {
                SDL_FreeSurface(ligne[i]);
            }
           SDL_Quit();

            return EXIT_SUCCESS;
        }

        void pause()
        {
            int continuer = 1;
            SDL_Event event;

            while (continuer)
            {
                SDL_WaitEvent(&event);
                switch(event.type)
                {
                    case SDL_QUIT:
                        continuer = 0;
                }
            }
        }
        • Partager sur Facebook
        • Partager sur Twitter
          20 mars 2006 à 15:26:53

          Voici ton code corrigé :
          #include <stdlib.h>
          #include <stdio.h>
          #include <SDL/SDL.h>

          void pause();

          int main(int argc, char *argv[])
          {
            SDL_Surface *ecran = NULL , *ligne[256] = {NULL};
            SDL_Rect position_degrade;
           
            int i;
           
            SDL_Init(SDL_INIT_VIDEO);
           
            ecran = SDL_SetVideoMode(400,256,32,SDL_HWSURFACE);

            for( i = 0 ; i <= 255;i++)
              {
                ligne[i] =  SDL_CreateRGBSurface(SDL_HWSURFACE, 400 , 1 , 32 , 0, 0, 0, 0);
              }
           
            SDL_WM_SetCaption("mon dégradé",NULL);
           
            SDL_FillRect(ecran , NULL ,SDL_MapRGB(ecran->format, 0, 0, 0));
           
            for(i = 0; i <= 255;i++)
              {
                position_degrade.x = 0;
                position_degrade.y = i;
               
                SDL_FillRect(ligne[i],NULL,SDL_MapRGB(ecran->format,i,i,i));
               
                SDL_BlitSurface(ligne[i] , NULL , ecran ,&position_degrade);
              }
           
           
            pause(ligne);
           
            for(i = 0 ; i < 255 ; i++)
              {
                SDL_FreeSurface(ligne[i]);
              }
            SDL_Quit();
           
            return EXIT_SUCCESS;
          }

          void pause()
          {
            int continuer = 1;
            SDL_Event event;
           
            while (continuer)
              {
                SDL_WaitEvent(&event);
                switch(event.type)
                  {
                  case SDL_QUIT:
                    continuer = 0;
                  }

              }
          }


          Il manquait un = dans la première boucle for !

          Sachez que les SegFault vienne d'un depassement de tableau !
          Donc regarder vos tableaux ;)
          • Partager sur Facebook
          • Partager sur Twitter
            20 mars 2006 à 16:00:23

            merci beaucoup natim .
            • Partager sur Facebook
            • Partager sur Twitter
              20 mars 2006 à 17:39:18

              Au passage, si vous voulez récupérez des détails plus précis sur les erreurs qui se sont produites utilisez la fonction SDL_GetError() comme suit:

              printf("%s",SDL_GetError() );

              ça va créer un fichier stdout.exe dans le répertoire de votre projet, et dedans de plus amples détails sur les bugs ^^.Mettez en partout.
              • Partager sur Facebook
              • Partager sur Twitter
                20 mars 2006 à 19:15:27

                ouais j'avais remarqué ^^ .
                • Partager sur Facebook
                • Partager sur Twitter

                Probleme avec la sdl

                × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                • Editeur
                • Markdown