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

Auteur Sujet: [Résolu] Segmentation Fault initialisation sf::Mutex  (Lu 2388 fois)

0 Membres et 1 Invité sur ce sujet

GuiTeK

  • Newbie
  • *
  • Messages: 1
    • Voir le profil
[Résolu] Segmentation Fault initialisation sf::Mutex
« le: Décembre 25, 2013, 09:31:30 pm »
Bonjour,

J'ai une segfault dans la liste d'initialisation du constructeur d'une classe sur un sf::Mutex.

Mon header :
#ifndef GAMEWINDOW_H
#define GAMEWINDOW_H

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

#include <memory>

class GameWindow
{
public:
    GameWindow(sf::RenderWindow &renderWindow, TcpClient &tcpClient);

    bool show();

    void setGameMap(const std::shared_ptr<const GameMap> &gameMap);


private:
    sf::RenderWindow &m_renderWindow;
    TcpClient &m_tcpClient;
    GameClient m_gameClient;

    std::shared_ptr<const GameMap> m_gameMap;
        sf::Mutex m_gameMapMutex;
};

#endif // GAMEWINDOW_H
 

Fichier source :
GameWindow::GameWindow(sf::RenderWindow &renderWindow, TcpClient &tcpClient) :
    m_renderWindow(renderWindow),
    m_tcpClient(tcpClient),
    m_gameClient(tcpClient, this),
    m_gameMap(NULL),
    m_gameMapMutex()
{
}

La segfault arrive après avoir exécuté la ligne m_gameMapMutex().
  • Il n'y a pas de segfault lorsque je remplace le sf::Mutex par un std::mutex
  • La segfault disparaît lorsque je place le sf::Mutex avant les 4 autres variables membre

Informations supplémentaires :
Je compile avec MinGW 4.8.0 rev 2, système de gestion d'exceptions DWARF-2. Option -std=c++11 activée.

Call stack :
0       __gnu_cxx::__exchange_and_add   atomicity.h     47      0x401653       
1       __gnu_cxx::__exchange_and_add_dispatch  atomicity.h     80      0x4016a3       
2       std::_Sp_counted_base<(__gnu_cxx::_Lock_policy)2>::_M_release   shared_ptr_base.h       141     0x43307f       
3       std::__shared_count<(__gnu_cxx::_Lock_policy)2>::operator=      shared_ptr_base.h       572     0x432120       
4       std::__shared_ptr<GameMap const, (__gnu_cxx::_Lock_policy)2>::operator= shared_ptr_base.h       757     0x4305f9       
5       std::shared_ptr<GameMap const>::operator=       shared_ptr.h    93      0x42d461       
6       GameWindow::setGameMap  GameWindow.cpp  65      0x407a0a       
7       GameClient::GameClient  GameClient.cpp  17      0x401c30       
8       GameWindow::GameWindow  GameWindow.cpp  10      0x4076a7       
9       main    main.cpp        46      0x401916       
 

Qu'en pensez-vous ? C'est un bug de SFML ou bien une horreur de ma part  :P ?
« Modifié: Décembre 25, 2013, 09:55:11 pm par GuiTeK »

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : Segmentation Fault initialisation sf::Mutex
« Réponse #1 le: Décembre 25, 2013, 09:45:10 pm »
Ca n'a rien à voir avec le mutex. Regarde attentivement la pile d'appels.

Le souci c'est que tu appelles GameWindow::setGameMap alors que ton instance de GameWindow n'a même pas fini de se construire. Tu as donc à ce moment des variables non initialisées, qui sont j'imagine utilisées dans ladite fonction (en l'occurence m_gameMap).
« Modifié: Décembre 25, 2013, 09:48:22 pm par Laurent »
Laurent Gomila - SFML developer