Bonjour à tous
!
Je vous écris parce que je rencontre un problème de SEG FAULT à l'arrêt de mon programme. (Tout marche bien, jusqu'à ce que je clique sur la croix)
Voici le rapport du debugger :
#0 02B30713 ??() (C:\Windows\SysWOW64\nvoglv32.dll:??)
#1 00000000 0x0054bfc0 in ??() (??:??)
#2 00000000 0x0028fc50 in ??() (??:??)
#3 02B30812 ??() (C:\Windows\SysWOW64\nvoglv32.dll:??)
#4 00000000 0x0054bfc0 in ??() (??:??)
#5 00000000 0x0054bfc0 in ??() (??:??)
#6 00000000 0x0028fc6c in ??() (??:??)
#7 02B30219 ??() (C:\Windows\SysWOW64\nvoglv32.dll:??)
#8 00000000 0x0054bfc0 in ??() (??:??)
#9 00000000 0x00000010 in ??() (??:??)
#10 024D15BE ??() (C:\Windows\SysWOW64\nvoglv32.dll:??)
#11 00000000 0x00000001 in ??() (??:??)
#12 00000000 0x66980000 in ??() (??:??)
#13 00000000 0x0028fcdc in ??() (??:??)
#14 669A1AEA sf::Texture::~Texture() (C:\Users\*******\Documents\Projets C++\******\sfml-graphics-2.dll:??)
Je me suis rendu compte qu'en enlevant cette ligne :
texteBouton.setString(sf::String("Bouton"));
Du constructeur de ma classe suivante :
bouton.hclass bouton
{
public:
bouton();
~bouton();
sf::RectangleShape* getSprite();
sf::Text* getText();
void setSize(sf::Vector2f taille);
void setText(std::string texte);
void setColor(sf::Color couleur);
void setTextColor(sf::Color couleur);
void setColorHover(sf::Color couleur);
void setTextColorHover(sf::Color couleur);
void setPosition(sf::Vector2f pos);
void setFont(sf::Font *font);
private:
void refresh();
sf::Vector2f tailleBouton;
sf::Font *fontBouton;
sf::Color couleurBouton;
sf::Color couleurTexte;
sf::Color couleurBoutonHover;
sf::Color couleurTexteHover;
sf::RectangleShape rectBouton;
sf::Text texteBouton;
};
bouton.cpp :bouton::bouton()
{
rectBouton.setPosition(sf::Vector2f(0,0));
tailleBouton = sf::Vector2f(200,30);
couleurBouton = sf::Color(40,40,40);
couleurTexte = sf::Color(0,162,232);
couleurBoutonHover = sf::Color(60,60,60);
couleurTexteHover = sf::Color(220,220,220);
texteBouton.setString(sf::String("Bouton"));
texteBouton.setCharacterSize(14);
fontBouton=NULL;
refresh();
}
bouton::~bouton()
{
}
void bouton::refresh()
{
if(fontBouton!=NULL)
texteBouton.setFont(*fontBouton);
rectBouton.setSize(tailleBouton);
rectBouton.setFillColor(couleurBouton);
texteBouton.setColor(couleurTexte);
sf::FloatRect textRect = texteBouton.getLocalBounds();
sf::Vector2f dimT = sf::Vector2f(textRect.width,textRect.height);
sf::Vector2f newpos = rectBouton.getPosition();
std::cout << "x : " << rectBouton.getSize().x << " - y : " << rectBouton.getSize().y << std::endl;
newpos = newpos + sf::Vector2f(round(rectBouton.getSize().x/2 - dimT.x/2), round(rectBouton.getSize().y/2 - dimT.y/2));
texteBouton.setPosition(newpos);
}
void bouton::setPosition(sf::Vector2f pos)
{
rectBouton.setPosition(pos);
refresh();
}
sf::RectangleShape* bouton::getSprite()
{
return &rectBouton;
}
sf::Text* bouton::getText()
{
return &texteBouton;
}
void bouton::setSize(sf::Vector2f taille)
{
rectBouton.setSize(taille);
tailleBouton=taille;
bouton::refresh();
}
void bouton::setText(std::string texte)
{
texteBouton.setString(texte);
bouton::refresh();
}
void bouton::setColor(sf::Color couleur)
{
couleurBouton = couleur;
bouton::refresh();
}
void bouton::setTextColor(sf::Color couleur)
{
couleurTexte = couleur;
bouton::refresh();
}
void bouton::setColorHover(sf::Color couleur)
{
couleurBoutonHover = couleur;
bouton::refresh();
}
void bouton::setTextColorHover(sf::Color couleur)
{
couleurTexteHover = couleur;
bouton::refresh();
}
void bouton::setFont(sf::Font *font)
{
fontBouton=font;
bouton::refresh();
}
Je n'obtenais plus d'erreur ...
Si quelqu'un avait la solution à mon problème, je lui serait extrêmement reconnaissant. Par ailleurs, si mon code est dégueulasse, merci de me le signaler, car je débute avec la SFML et en POO en général.
Merci encore !
EDIT : Après plusieurs essais, je me suis rendu compte que dès que j'enlevais tout ce qui était en rapport avec :
xxxxxx.setString(sf::String("ma string"));
ainsi que le window.draw() de mon Text, je n'ai plus de segfault. (Mais ça m'arrange pas, je dois afficher du texte
)
En revanche, même si je ne dessine pas mon Text, mais que je décide de lui appliquer setString, je retrouve ma segfault à la fermeture du programme ...
EDIT 2 : Configuration :
- Windows 7 x64 Pro
- GTX560Ti (Drivers à jour)
- DirectX11