Bienvenue, Invité. Merci de vous connecter ou de vous inscrire.
Avez-vous perdu votre e-mail d'activation ?

Auteur Sujet: Segmentation fault avec Code::blocks  (Lu 12040 fois)

0 Membres et 1 Invité sur ce sujet

maju93160

  • Newbie
  • *
  • Messages: 30
    • Voir le profil
Segmentation fault avec Code::blocks
« le: Août 14, 2012, 01:55:06 pm »
Bonjours,
Débutant en SFML ainsi que en C++, j'ai décidé de me faire un petit jeu en 2d mais lorsque j'appuie sur Echap ou sur " Lancer le jeu " j'ai une erreur de Segmentation.
J'aimerais donc avoir un peu d'aide  ;D

voici le code source :
#include <iostream>
#include <SFML/Graphics.hpp>


using namespace sf;
using namespace std;


unsigned int const LONGUEUR(1008);
unsigned int const LARGEUR(567);

int main(int argc,char** argv)
{
    /**
     * page de titre
    */



    RenderWindow app(VideoMode(LONGUEUR,LARGEUR,32),"Tower Defence : Ecran Titre", Style::None);

    /**
    * ouverture de la page de titre ainsi que de la police
    *
    */


    Image imageTitre;
    Sprite titre;
    Font font;
    String text;

    // test ouverture de la page de titre et de la police

    if(!imageTitre.LoadFromFile("titre.png"))
    {
        return EXIT_FAILURE;
    }
    if(!font.LoadFromFile("Decibel_2.ttf"))
    {
        return EXIT_FAILURE;
    }
     // Le projet c'est lancé correctement :

    else
   {
    titre.SetImage(imageTitre);
   }

    // parametre du text et de l'arrier plan

    text.SetText("Lancer le jeu !");
    text.SetFont(font);
    text.SetSize(36);
    text.SetPosition(LONGUEUR/1.5,LARGEUR/1.2);
    text.SetStyle(String::Regular);
    titre.SetPosition(Vector2f(0,0));


    // taille du texte

    unsigned int largeurTexte = text.GetRect().GetWidth(); // Largeur du texte
    unsigned int hauteurTexte = text.GetRect().GetHeight(); // Hauteur du texte

   /**
    * boucle principal de l'écran de Titre
    */


   while(app.IsOpened())
   {
       Event event;

       while(app.GetEvent(event))
       {
           if((event.Type == Event::MouseButtonPressed) && (event.MouseButton.Button == sf::Mouse::Left))
           {
               if ((event.MouseButton.X >= LONGUEUR/1.5) && (event.MouseButton.X <= (LONGUEUR/1.5 + largeurTexte)))
                {
                    if ((event.MouseButton.Y >= LARGEUR/1.2) && (event.MouseButton.Y <= (LARGEUR/1.2 + hauteurTexte)))
                    {
                        app.Close();
                    }
                }

           }

            if((event.Type == Event::KeyReleased) && (event.Key.Code == sf::Key::Escape))
            {
                app.Close();
            }

        app.Draw(titre);
        app.Draw(text);
        app.Display();
        }
   }

    return EXIT_SUCCESS;
}
 



Merci  ;)

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : Segmentation fault avec Code::blocks
« Réponse #1 le: Août 14, 2012, 02:13:41 pm »
C'est un bug connu lié à l'utilisation de sf::String. Tu n'y peux rien. Ou plutôt si : passer tout de suite à SFML 2. SFML 1.6 est déjà obsolète, ne commence pas ton apprentissage avec cette version.
Laurent Gomila - SFML developer

maju93160

  • Newbie
  • *
  • Messages: 30
    • Voir le profil
Segmentation fault avec Code::blocks
« Réponse #2 le: Août 14, 2012, 02:39:07 pm »
A je pensais que c'étais de ma faute :-[
merci :)

maju93160

  • Newbie
  • *
  • Messages: 30
    • Voir le profil
Re : Segmentation fault avec Code::blocks
« Réponse #3 le: Août 15, 2012, 07:54:49 pm »
re bonjours,

Je suis passé à la 2.0, mais j'aimerais savoir si il est encore  possible de Récupérer la taille d'un texte (largeur, hauteur) comme on pouvais le faire avec la 1.6.
Comme je suis débutant j'ai encore du mal à me retrouver dans la documentation   :-[

Merci

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : Segmentation fault avec Code::blocks
« Réponse #4 le: Août 15, 2012, 08:49:49 pm »
Bah, y a pas tant de fonctions que ça dans les classes, t'as vite fait le tour dans la doc... :P

sf::FloatRect rect = text.getGlobalBounds();
float width = rect.width;
float height = rect.height;
Laurent Gomila - SFML developer

maju93160

  • Newbie
  • *
  • Messages: 30
    • Voir le profil
Re : Segmentation fault avec Code::blocks
« Réponse #5 le: Août 15, 2012, 09:17:41 pm »
Merci,
Je refaire un tour dans la doc ^^.

maju93160

  • Newbie
  • *
  • Messages: 30
    • Voir le profil
Re : Segmentation fault avec Code::blocks
« Réponse #6 le: Août 15, 2012, 09:41:26 pm »
Re,

J'ai fait les modifications et j'ai toujours le même problème que en 1.6  ???
est-ce que j'ai fait une erreur ?
 
Voici le code source :

       
       
#include <iostream>
#include <SFML/Graphics.hpp>

using namespace sf;
using namespace std;

unsigned int const LONGUEUR(1008);
unsigned int const LARGEUR(567);

int main(int argc,char** argv)
{
     /**
     * page de titre
    */


    RenderWindow app(VideoMode(LONGUEUR,LARGEUR),"Tower Defence : Ecran Titre", Style::None);

    /**
    * ouverture de la page de titre ainsi que de la police
    *
    */


    Texture imageTitre;
    Font font;
    Text text("Lancer le jeu !");

    // test ouverture de la page de titre et de la police

    if(!imageTitre.loadFromFile("titre.png"))
        return EXIT_FAILURE;

     Sprite titre(imageTitre);

    if(!font.loadFromFile("Decibel_2.ttf"))
        return EXIT_FAILURE;
   


    // parametre du text et de l'arrier plan

    text.setFont(font);
    text.setCharacterSize(36);
    text.setPosition(LONGUEUR/1.5,LARGEUR/1.2);
    titre.setPosition(Vector2f(0,0));


    // taille du texte

    FloatRect rect = text.getGlobalBounds();
    float  largeurTexte = rect.width;
    float  hauteurTexte = rect.height;

   /**
    * boucle principal de l'écran de Titre
    */


   while(app.isOpen())
   {
       Event event;

       while(app.pollEvent(event))
       {
           if((event.type == Event::MouseButtonPressed) && (event.mouseButton.button == sf::Mouse::Left))
           {
               if ((event.mouseButton.x >= LONGUEUR/1.5) && (event.mouseButton.x <= (LONGUEUR/1.5 + largeurTexte)))
                {
                    if ((event.mouseButton.y >= LARGEUR/1.2) && (event.mouseButton.y <= (LARGEUR/1.2 + hauteurTexte)))
                    {
                        app.close();
                    }
                }
           }

            if((event.type == Event::KeyReleased) && (event.key.code == sf::Keyboard::Escape))
            {
                app.close();
            }

        app.draw(titre);
        app.draw(text);
        app.display();
        }
   }

    return EXIT_SUCCESS;
}
 

Merci de bien vouloir m'aider encore une fois  ;)

PS : merci de l'aide apporter ainsi que de la vitesse de cette dernière :-*

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : Segmentation fault avec Code::blocks
« Réponse #7 le: Août 15, 2012, 10:42:40 pm »
Ce problème n'a été reglé que très récemment sur SFML 2, après la RC (que tu as dû prendre).

Deux solutions : soit télécharger et compiler les dernières sources de SFML, soit modifier ton code de la sorte :
Text text("Lancer le jeu !", font);
(en gros il faut toujours passer une police au constructeur de tes sf::Text)
Laurent Gomila - SFML developer

maju93160

  • Newbie
  • *
  • Messages: 30
    • Voir le profil
Re : Segmentation fault avec Code::blocks
« Réponse #8 le: Août 16, 2012, 01:35:05 pm »
Re bonjours,
J'ai fait les modifications et toujours le même problème :
La fenêtre s'ouvre mais lorsque on arrive sur :

app.close();
 


Le programme marque une Segmentation fault, j'ai essayer de passer en mode console et de remplacer
app.close();
 


par :
 std::cout << "fonctionne ! " << std::endl;


Et tout à coups je n'ais plus l'erreur mais lorsque je remet app.close(); j'ai à nouveau l'erreur.
est-ce que je dois remplacer quelque chose?

Merci

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : Segmentation fault avec Code::blocks
« Réponse #9 le: Août 16, 2012, 01:43:18 pm »
Bon il faut savoir si oui ou non on parle bien du même bug. Lance ton debugger et montre moi la pile d'appels après le crash.
Laurent Gomila - SFML developer

maju93160

  • Newbie
  • *
  • Messages: 30
    • Voir le profil
Re : Segmentation fault avec Code::blocks
« Réponse #10 le: Août 16, 2012, 01:56:33 pm »
Re,
Je sais pas si c'est cela mais normalement ça doit être ça:
Citer
Building to ensure sources are up-to-date
Build succeeded
Selecting target:
Debug
Adding source dir: D:\TowerDefence\
Adding source dir: D:\TowerDefence\
Adding file: bin\Debug\TowerDefence.exe
Starting debugger:
done
Registered new type: wxString
Registered new type: STL String
Registered new type: STL Vector
Setting breakpoints
Debugger name and version: GNU gdb (GDB) 7.4
Child process PID: 3516
Program received signal SIGSEGV, Segmentation fault.
In ?? () ()
Debugger finished with status 0

Le programme se lance mais après ça beug je sais pas d'où ça peut venir

Merci encore  :)

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : Segmentation fault avec Code::blocks
« Réponse #11 le: Août 16, 2012, 02:34:00 pm »
Non ce n'est pas ça. Le debugger peut donner des informations beaucoup plus approfondies, et très facilement. Je te recommande un peu de lecture sur le sujet, connaître les bases du debugger c'est crucial pour tout bon programmeur. C'est comme ça qu'on évite les "ça beug je sais pas d'où ça peut venir". Le debugger le sait, lui.

Tu devrais trouver comment afficher la pile d'appels en 2 secondes avec l'aide de Google ;)
Laurent Gomila - SFML developer

maju93160

  • Newbie
  • *
  • Messages: 30
    • Voir le profil
Re : Segmentation fault avec Code::blocks
« Réponse #12 le: Août 16, 2012, 04:27:04 pm »
Re,
Tout d'abord merci de m'avoir appris à mieux utiliser le debugger, mais ici la pile d'appels n'affiche pas la ligne où se situe le problème...

Voici la pile d'appels:


J'ai aussi réussi à afficher Watches :



Merci d'avance  ;)

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : Segmentation fault avec Code::blocks
« Réponse #13 le: Août 16, 2012, 04:34:18 pm »
Bizarre. Tu compiles bien en mode Debug ?

Peux-tu nous montrer ton projet (fichier .cbp) ?
Laurent Gomila - SFML developer

maju93160

  • Newbie
  • *
  • Messages: 30
    • Voir le profil
Re : Segmentation fault avec Code::blocks
« Réponse #14 le: Août 16, 2012, 05:11:16 pm »
Re,

On peux le télécharger sur ce lien ci-dessous :
http://1ct2m6.1fichier.com/

Merci