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 :

Aide pour résoudre erreur de segmentation


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 37
    Par défaut Aide pour résoudre erreur de segmentation
    Bonjour à tous ,

    j'espère que vous allez m'aider à résoudre ce problème .
    Lorsque j'ai essayé de compiler le code , je trouve un erreur de segmentation :
    num_nodes is set 100
    INITIALIZE THE LIST xListHead
    channel.cc:sendUp - Calc highestAntennaZ_ and distCST_
    highestAntennaZ_ = 1.5, distCST_ = 550.0
    SORTING LISTS ...DONE!
    from :le noeud source :5 to:le noeud disrtination : 0 : ==> 60 ==> 88 ==> 17 ==> 96 ==> 0
    Erreur de segmentation
    j ai essayé de déboguer le problème à l'aide de gdb :
    Starting program: /usr/local/bin/ns wireless_net5--0.tcl
    num_nodes is set 100
    INITIALIZE THE LIST xListHead
    channel.cc:sendUp - Calc highestAntennaZ_ and distCST_
    highestAntennaZ_ = 1.5, distCST_ = 550.0
    SORTING LISTS ...DONE!
    from :le noeud source :5 to:le noeud disrtination : 0 : ==> 31 ==> 88 ==> 32 ==> 92 ==> 55 ==> 0

    Program received signal SIGSEGV, Segmentation fault.
    0x08253e8a in MobileNode::X() ()
    la ligne de code qui me pose le problème c'est :
    double angle = atan2(node->Y() - sourcenode->Y(), node->X() - sourcenode->X()) - atan2(destnode->Y() - sourcenode->Y(), destnode->X() - sourcenode->X());
    pouvez vous m'aidez à résoudre ce problème ?
    Merci d'avance pour l'aide

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    1 415
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 1 415
    Par défaut
    Salut

    Citation Envoyé par MounaR Voir le message
    pouvez vous m'aidez à résoudre ce problème ?
    Oui, mais il faut nous montrer plus de code. Dans ton cas, il y a un des pointeurs (node, sourcenode ou destnode) qui est vraisembablement invalide. Les traces de ton programme ne nous aident pas si on n'a pas de code source.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 37
    Par défaut
    d'accord , voici les déclarations des pointeurs :

    MobileNode* destnode = (MobileNode*)source;
    MobileNode* sourcenode = (MobileNode*)dest;
    MobileNode* node = (MobileNode*)noeud;

    double angle = atan2(node->Y() - sourcenode->Y(), node->X() - sourcenode->X())- atan2(destnode->Y() - sourcenode->Y(), destnode->X() - sourcenode->X());


    merci d'avance

  4. #4
    Membre Expert
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    1 415
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 1 415
    Par défaut
    Merci d'utiliser la balise code.

    Du reste, je vois pas comment ça peut m'aider : je ne peux pas deviner par magie d'où sortent source, dest et noeud. Je ne connais même pas leurs types !

    Cependant, je constate que tu fais un cast C-style. Puisqu'on est en C++, je t'invite à utiliser le cast C++ dynamic_cast et de tester tes pointeurs :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    MobileNode* destnode = dynamic_cast< MobileNode* >(source);
    if(null != destnode)
    {
      // Code qui déréférence destnode
    }
    Et au passage d'aller lire cette page.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 37
    Par défaut
    merci vivement pour l'aide .
    MobileNode est une classe déjà existante sous le simulateur ns2 .
    j'utilise la classe MobileNode pour se bénéficier des méthodes X() et Y() qui retournent les coordonnées des nœuds : nœud , dest , source
    je vais essayé ce que vous venez de proposer .
    merci

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 37
    Par défaut
    bon pour ceux qui auront le même problème , la solution:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MobileNode* destnode = (MobileNode*)source;
    source est de type nsaddr_t , j ai volu créer un MobileNode d'adresse source
    la solution :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MobileNode* sourcenode = (MobileNode*)(Node::get_node_by_address(source));
    merci jblecanard pour votre attention

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 0
    Dernier message: 26/04/2010, 13h07
  2. VB.NET ==> Aide pour DataGrid + Erreur
    Par Loan26 dans le forum VB.NET
    Réponses: 1
    Dernier message: 26/11/2007, 19h30
  3. Besoin d'aide pour une erreur CR_INVALID_BUFFER_USE
    Par ArkaneJouan dans le forum SQL Procédural
    Réponses: 0
    Dernier message: 02/10/2007, 11h12
  4. Aide pour résoudre un énoncé d'examen
    Par xplose dans le forum Pascal
    Réponses: 3
    Dernier message: 04/09/2007, 22h07
  5. Aide pour résoudre un Segmentation fault
    Par Premium dans le forum C
    Réponses: 8
    Dernier message: 10/12/2005, 12h26

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