IdentifiantMot de passe
Loading...
Mot de passe oubli� ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les r�ponses en temps r�el, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

Segmentation fault li� � un cast


Sujet :

C++

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre �prouv�
    Profil pro
    Inscrit en
    F�vrier 2007
    Messages
    217
    D�tails du profil
    Informations personnelles :
    �ge : 32
    Localisation : France

    Informations forums :
    Inscription : F�vrier 2007
    Messages : 217
    Par d�faut Segmentation fault li� � un cast
    Bonjour,

    Je suis en train de peaufiner un crypteur par courbe elliptique en mettant dans celui-ci un ... crackeur . C'est un crackage par force brute (de toute fa�on on peut pas faire mieux ). Pour am�liorer la vitesse de crackage j'ai eu l'id�e d'utiliser plusieurs threads ce qui distribue les calculs sur les coeurs du processeur (autant que �a tourne � 100%).

    Le probl�me, c'est que �a plante: un bel segmentation fault dans les r�gles de l'art du crash.

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
     
    template<typename T>
    class InfoPackage
    {
        public:
     
            InfoPackage(){}
            InfoPackage(Cracker<T>* cracker, User<T>* user, User<T>* connectedUser, int offset, int iterateBy):
             m_cracker(cracker),
             m_user(user),
             m_connectedUser(connectedUser),
             m_offset(offset),
             m_iterateBy(iterateBy)
            {}
     
            Cracker<T>* m_cracker;
            User<T>* m_user;
            User<T>* m_connectedUser;
            int m_offset;
            int m_iterateBy;
    };
     
    template<typename T>
    void* CrackKey(void* infos)
    {
        InfoPackage<T> informations = *(static_cast<InfoPackage<T>*>(infos));
        Cracker<T>* cracker = informations.m_cracker;
        std::pair<T,T> point = cracker->m_connections[informations.m_user].m_refPoint;
        std::pair<T,T> researchedPoint = informations.m_user->GetComputedPoint(informations.m_connectedUser);
        EllipticCurve<T> curve = cracker->m_connections[informations.m_user].m_curve;
     
        for(long long i = informations.m_offset;; i+= informations.m_iterateBy)
        {
            cracker->m_mutex.Lock();
            if(cracker->keyA != 0)
            {
                cracker->m_mutex.UnLock();
                break;
            }
     
            if(curve.QuickExponentiation(i, point) == researchedPoint)
            {
                cracker->keyA = i;
                break;
                cracker->m_mutex.UnLock();
                return (void*)0;
            }
        }
    }
    Ce n'est pas du aux boucles mais aux op�rations pr�c�dentes.

    Voila, si vous pouviez m'aider.
    Merci.

  2. #2
    Membre �prouv�
    Profil pro
    Inscrit en
    Ao�t 2003
    Messages
    159
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Ao�t 2003
    Messages : 159
    Par d�faut
    Aller ,
    Je vais m'engager sur ce post qui me semble de haute vol�e.

    InfoPackage<T> devrait avoir un constructeur par recopie � cause de
    l'initialisation faite dans le bout de code contenant le static_cast.
    Le static_cast, lorsqu'il ne g�n�re pas d'exception, ne renvoi pas de pointeur NULL.

  3. #3
    Membre �prouv�
    Profil pro
    Inscrit en
    F�vrier 2007
    Messages
    217
    D�tails du profil
    Informations personnelles :
    �ge : 32
    Localisation : France

    Informations forums :
    Inscription : F�vrier 2007
    Messages : 217
    Par d�faut
    Je ne comprends pas la n�cessit� d'un constructeur de copie, car je dois conserver un pointeur sur le "Cracker" et les "User" surveill�s. Si vous pouviez me donner des explications (et qu'est-ce qu'il doit faire ce constructeur).

    ps: Arf, c'est pas pour moi, mais pour mon grand fr�re que je fais �a


    second EDIT: apr�s avoir chang� le cast dans un autre bout de code (celui g�rant les threads win) d'un dynamic_cast vers un static_cast, �a ne plante plus avec le constructeur de copie.

    ps ps : C'est normal que mon processeur (un double core) ne fonctionne qu'� 50% et que seulement deux threads soient d�tect�s par win?

  4. #4
    Membre �prouv�
    Profil pro
    Inscrit en
    Ao�t 2003
    Messages
    159
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Ao�t 2003
    Messages : 159
    Par d�faut
    Citation Envoy� par khazna Voir le message
    Je ne comprends pas la n�cessit� d'un constructeur de copie, car je dois conserver un pointeur sur le "Cracker" et les "User" surveill�s. Si vous pouviez me donner des explications (et qu'est-ce qu'il doit faire ce constructeur).
    Ce constructeur permettra de s'assurer que les donn�es, en particulier les ponsteurs, sont bien copi�. La menace ici est d'�viter que les membres
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    Cracker<T>* m_cracker;
    User<T>* m_user;
    pointent sur un zone de infos qui n'est peut-�tre pas disponible.


    Citation Envoy� par khazna Voir le message
    second EDIT: apr�s avoir chang� le cast dans un autre bout de code (celui g�rant les threads win) d'un dynamic_cast vers un static_cast, �a ne plante plus avec le constructeur de copie.
    Bizzard, le dynamic_cast est pourtant plus s�r que le static_cast.

  5. #5
    Expert �minent
    Avatar de M�dinoc
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 41
    Localisation : France

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    Par d�faut
    Il est possible qu'en fait, �a fasse un comportement pire que le plantage, si le "plantage" �tait une exception lev�e par dynamic_cast<> ou un d�r�f�rencement de pointeur nul...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parl� avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

Discussions similaires

  1. Pb segmentation fault avec glutinit()
    Par pipistrelle dans le forum GLUT
    R�ponses: 2
    Dernier message: 17/11/2004, 23h17
  2. [SDL_Image] Img_Load : segmentation fault ....
    Par Mathieu.J dans le forum OpenGL
    R�ponses: 6
    Dernier message: 19/10/2004, 23h52
  3. [REDHAT] Segmentation fault systematique
    Par mela dans le forum RedHat / CentOS / Fedora
    R�ponses: 2
    Dernier message: 21/09/2004, 06h05
  4. R�ponses: 13
    Dernier message: 13/07/2004, 15h41
  5. Comment contrer la "segmentation fault" ?
    Par guillaume_pfr dans le forum C
    R�ponses: 15
    Dernier message: 08/08/2003, 13h43

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo