Forum de la communauté SFML

Aide => Général => Discussion démarrée par: cChaD le Juin 14, 2013, 08:54:17 pm

Titre: [Résolu]segfault..
Posté par: cChaD le Juin 14, 2013, 08:54:17 pm
Bonsoir, je viens vous demander de l'aide car j'ai un problème avec une méthode virtuel

    void Slider::SetPosition(int x, int y)
    {
        Widget::SetPosition(x, y);
        button->SetPosition(x, y - (button->GetDimensions().height / 6));
    }

j'obtiens un jolie segfault au lancement de la fenêtre, et je ne comprend absolument pas pourquoi...



Merci pour votre aide.
Titre: Re : segfault..
Posté par: Laurent le Juin 14, 2013, 09:40:18 pm
Utilise ton debugger. C'est fait pour ça. Parce que là, tous les membres du forum auront beau fixer ces 2 lignes de code pendant des heures, ça ne ferait pas avancer le schmilblick.
Titre: Re : segfault..
Posté par: cChaD le Juin 14, 2013, 09:55:15 pm
Voilà ce que j'obtiens

http://www.hostingpics.net/viewer.php?id=938937image.png
Titre: Re : segfault..
Posté par: Cpl.Bator le Juin 14, 2013, 10:14:28 pm
du franglais , berk...
ton shoot ne donne rien , à part que "dimension" est foireux.  ;)
Titre: Re : segfault..
Posté par: cChaD le Juin 14, 2013, 10:27:25 pm
tu franglais ? où ça ?

même si j'utilise ça j'ai un segfault

    void Slider::SetPosition(int x, int y)
    {
        Widget::SetPosition(x, y);
        button->SetPosition(x, y );
    }
Titre: Re : segfault..
Posté par: Laurent le Juin 14, 2013, 10:42:34 pm
Citer
this = 0xbaadf00d
Il faut apprendre à repérer ce genre d'adresse ;)

Je ne sais pas ce qu'elle signifie exactement (chaque compilo a ses propres conventions, il faut regarder la doc), mais ça sent l'appel virtuel depuis un constructeur, ou un truc de ce genre. Ou bien 'button' qui n'est pas alloué. Ce serait possible de voir le code de toutes les fonctions qu'on voit dans la pile d'appels ?
Titre: Re : segfault..
Posté par: cChaD le Juin 14, 2013, 10:50:03 pm
    Dimensions Widget::GetDimensions() const
    {
        return dimensions;
    }

    void Slider::SetPosition(int x, int y)
    {
        Widget::SetPosition(x, y);
        button->SetPosition(x, y );
    }

    Slider::Slider(int posX, int posY)
    {
        // Charge la texture
        image.setTexture(EngineManager::GetInstance()->Graphic->GetTextureID(7));

        // Dimensions réels de l'image
        realDimensions.width = image.getTexture()->getSize().x;
        realDimensions.height = image.getTexture()->getSize().y;
        dimensions.width = realDimensions.width;
        dimensions.height = realDimensions.height;

        // Position
        SetPosition(posX, posY);

        // Margins
        SetMargins(50,0,20,0);

        // Boutton de slide
        button = new Button();
        button->SetTexture(EngineManager::GetInstance()->Graphic->GetTextureID(8));
        button->SetTextureRect(sf::IntRect(0,0,30,30), sf::IntRect(0,0,30,30), sf::IntRect(0,0,30,30));
        button->SetPosition(position.x, position.y - (button->GetDimensions().height / 6));
        button->SetPadding(0);
        button->SetMargins(0);

        // Est en mouvement
        draged = false;
    }
 

Ah oui, en effet c'est l'appel de SetPosition() dans le constructeur qui provoque ça, merci !
Titre: Re : Re : segfault..
Posté par: Cpl.Bator le Juin 14, 2013, 11:12:02 pm
tu franglais ? où ça ?

J'ai rien dit , dimension est anglais aussi ^^ , j'aurais mis size.
autant pour je.