Partage
  • Partager sur Facebook
  • Partager sur Twitter

[C/SDL] Problème "Parachute" ...

Fatal signal: Segmentation Fault (SDL Parachute Deployed)

Sujet résolu
    13 juin 2006 à 16:52:08

    Bonjour bonjour :)

    Et ouais j'ai un problème avec : Fatal signal: Segmentation Fault (SDL Parachute Deployed)...
    Je crois que c'est un problème avec des variable mal déclarée ou que le programme utilise de la mémoire qu'il ne devrait pas, mais j'arrive pas à trouver ou est mon erreur :(

    En fait, c'est dans ma fonction "ecrire" qu'il y aurrait un problème.

    Voilà les codes

    main.c
    // main.c

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

    #include "constantes.h"
    #include "fonction.h"

    int main(int argc, char *argv[])
    {

        SDL_Init(SDL_INIT_VIDEO);

        SDL_Surface *ecran = NULL;
        SDL_Event event;

        TTF_Init();

        ecran = SDL_SetVideoMode(LARGEUR_FENETRE, HAUTEUR_FENETRE, 16, SDL_HWSURFACE | SDL_DOUBLEBUF);
        SDL_WM_SetCaption("SDL test :)", NULL);

        int continuer = 1;

            int taille = 34;
            int x = 10;
            int y = 10;

        while (continuer)
        {
            SDL_PollEvent(&event);
            switch(event.type)
            {
                case SDL_QUIT:
                    continuer = 0;
                    break;
                case SDL_KEYDOWN:
                    switch(event.key.keysym.sym)
                    {
                        case SDLK_ESCAPE: // Stopper le programme
                            continuer = 0;
                            break;
                    }
                    break;
            }

            ecrire("Hello World", taille, x, y, ecran); // Ecrire

            SDL_Flip(ecran);
        }


        SDL_Quit();

        return 0;
    }


    constantes.h
    #ifndef DEF_CONSTANTES
    #define DEF_CONSTANTES

        #define LARGEUR_FENETRE     320
        #define HAUTEUR_FENETRE     240

    #endif


    fonction.c
    #include <stdlib.h>
    #include <stdio.h>
    #include <SDL/SDL.h>
    #include <SDL/SDL_ttf.h>

    #include "constantes.h"
    #include "fonction.h"

    void ecrire(int texte, int taille,  int x, int y, SDL_Surface* ecran)
    {

        TTF_Font *font;
        font = TTF_OpenFont( "police.ttf", taille );
        SDL_Color textColor = { 255, 255, 255 };

        SDL_Rect positionTexte;
        SDL_Surface *message = NULL;

        positionTexte.x = x;
        positionTexte.y = y;

        message = TTF_RenderText_Blended( font, texte, textColor);

        SDL_BlitSurface(message, NULL, ecran, &positionTexte);
        SDL_Flip(ecran);

        SDL_FreeSurface(message);
    }


    fonction.h
    #ifndef DEF_FONCTION
    #define DEF_FONCTION

    void ecrire(int texte, int taille,  int x, int y, SDL_Surface* ecran);

    #endif


    excusez moi du code, il n'est pas commenté :/

    Voilà, merci d'avance !
    • Partager sur Facebook
    • Partager sur Twitter
      13 juin 2006 à 16:56:49

      Citation

      void ecrire(int texte



      aïe.
      • Partager sur Facebook
      • Partager sur Twitter
        13 juin 2006 à 18:53:20

        j'avais ce problème ac SDL_image quand l'image n'était pas ds le dossier du programme
        Peut-être qu'il ne trouve pas police.ttf ?
        • Partager sur Facebook
        • Partager sur Twitter
          13 juin 2006 à 19:48:39

          ce probléme est souvant du au fait que tu charge un fichier, mais soit le fichier n'existe pas soit tu donne le mauvais chemin d'accés. en tout cas c'est ce qui m'est arrivé souvant.
          • Partager sur Facebook
          • Partager sur Twitter
            13 juin 2006 à 21:12:58

            @ bluestorm : oui je sais "void ecrire(int texte" c'est pas beau ^^ mais quand je mets un char, ça marche encore moin !!

            bah, police.ttf est dans mon dossier, en fait il arrive à la charger, puisque qu'une fenêtre souvre avec écrit "Hello world" donc la police fonctionne!

            Donc j'arrive pas à voir le problème...
            • Partager sur Facebook
            • Partager sur Twitter
              13 juin 2006 à 21:15:40

              Si le texte s'affiche, alors ta fonction "écrire" a bien fonctionné.... Donc le bug vient sans doute d'ailleurs...
              • Partager sur Facebook
              • Partager sur Twitter
                13 juin 2006 à 21:18:12

                bah je sais pas, parce-que le même code sans : " ecrire("Hello World", taille, x, y, ecran); // Ecrire" fonctionne sans problème, donc je pense que c'est la ou il y a le problème, nan ?
                • Partager sur Facebook
                • Partager sur Twitter
                  13 juin 2006 à 21:21:09

                  effectivement..Ton programme ferme-t-il brutalement?
                  Aprés la boucle, mets

                  printf("Fermeture correcte");


                  Puis ouvre et ferme le programme, et vérifie si ce message s'est bien écrit dans stdout.txt ...
                  • Partager sur Facebook
                  • Partager sur Twitter
                    13 juin 2006 à 21:29:51

                    "Hello world", c'est un int ? non.
                    C'est un char ? non.
                    C'est quoi ? un pointeur vers un char (en gros)
                    Donc quand tu déclares la fonction (et dans le prototype) c'est pas "int texte" mais "char * texte".

                    Sauf que je l'ai dit, mais t'as pas su le lire. Ni aucun des gens qui ont répondu au topic. Dommage...
                    • Partager sur Facebook
                    • Partager sur Twitter
                      13 juin 2006 à 21:58:54

                      Ah oui mince, j'avais pas compris ^^
                      Merci :)

                      Mais une fois que je modifie "int texte" par "char * texte", dans ma fonction, "message = TTF_RenderText_Blended( font, texte, textColor);" ça fonctionne plus ?

                      Faut que je copie la chaine texte dans une autre pour pouvoir faire le TTF_RenderText ?

                      En tous cas merci pour vos réponses :)

                      Edit : Mais quand je sort "ecrire(texte, taille, x, y, ecran);" de la boucle While, tout fonctionne !

                      Merci tous le monde, je pense que mon problème est résolue une fois de plus grace à vous :)
                      • Partager sur Facebook
                      • Partager sur Twitter
                        13 juin 2006 à 22:28:22

                        :'( moi j'ai la même erreur : Fatal signal: Segmentation Fault (SDL Parachute Deployed)
                        et quand j'éxécute le programme et que j'ouvre
                        stdout.txt y a rien alors qu'un message devrait y être ?!
                        • Partager sur Facebook
                        • Partager sur Twitter
                          13 juin 2006 à 23:05:06

                          deja t px enlever un dl-flip si ça peux te faire plaisir, les reproches... mais bon la je seche !
                          EDIT: ah mais si il faut mettre la chaine "hello world!" dans une xhaine concrete, et passer le pointeur sur lautre truc ! la ça devrai aller. ou alor mettre char texte[] dans le prototype je sais pas c('est comme tu veux. aller bonne chance
                          • Partager sur Facebook
                          • Partager sur Twitter
                            13 juin 2006 à 23:18:03

                            TTF_Init et tout ce qui va avec, il faut le mettre dans la fonction.
                            J'ai essayé ton code dans mon IDE, j'ai supprimé la fonction ecrire, et ça marche a merveille ^^ .
                            • Partager sur Facebook
                            • Partager sur Twitter
                              14 juin 2006 à 12:01:37

                              Mais en fait, j'ai sortie "ecrire("Texte", 12, 0, 0, 0, ecran);" de la boucle while et ça marche :)
                              Donc je pense que mon problème est résolu !

                              Merci de votre aide !
                              • Partager sur Facebook
                              • Partager sur Twitter
                                14 juin 2006 à 21:31:49

                                ouais mais nan c pas réosolu: onn c pas pk .... DONC SI YA QQN DE RTRES TRRRRRRRRRES FORT !!!! lol
                                • Partager sur Facebook
                                • Partager sur Twitter
                                  14 juin 2006 à 21:47:24

                                  Bah enfait, quand tu mets dans la boucle, à chaque tour de boucle, on blit la même image (on utilise les même variable et tout, donc je pense que c'est la le problème)
                                  enfin la, c'est pour mon problème !
                                  • Partager sur Facebook
                                  • Partager sur Twitter

                                  [C/SDL] Problème "Parachute" ...

                                  × 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