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 :

Que fait cette ligne de code svp ?


Sujet :

C++

  1. #21
    Membre confirmé
    Inscrit en
    Août 2007
    Messages
    88
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 88
    Par défaut
    Citation Envoyé par Médinoc Voir le message
    Quand j'ai posté ce code, il compilait sans erreurs.
    Poste tes messages d'erreurs. Pourquoi les gens s'attendent-ils toujours à ce que le gars en face ait une boule de cristal sur lui?
    desoler j'ai commu une erreur de compilation en compilant un ancien code je les compiler sans erreur mais en l'executant il m'afficher un message "Segmentation fault"
    c'est quoi cet erreur

  2. #22
    Membre confirmé
    Inscrit en
    Août 2007
    Messages
    88
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 88
    Par défaut
    Citation Envoyé par Médinoc Voir le message
    Quand j'ai posté ce code, il compilait sans erreurs.
    Poste tes messages d'erreurs. Pourquoi les gens s'attendent-ils toujours à ce que le gars en face ait une boule de cristal sur lui?
    voici comment je la comile et comment je l'execute
    g++ -Wall -Werror a7.c -o anis
    ./anis /home/anis/PFE/Fichie2.txt /home/anis/PFE/Syn.txt
    et voila ce que le fichier Fiche2.txt contient

    !IPSummaryDump 1.3
    !creator "ipsumdump -i eth0 -f tcp && syn -FsSQdDK"
    !host localhost.localdomain
    !runtime 1235799799.453346885 (Sat Feb 28 06:43:19 2009)
    !data tcp_flags ip_src sport tcp_seq ip_dst dport tcp_ack
    S 192.168.105.150 64382 2340904119 192.168.105.200 8080 0
    S 192.168.105.36 48903 2012784730 192.168.105.200 8080 0
    SA 192.168.105.200 8080 2672045570 192.168.105.36 48903 2012784731
    S 192.168.105.150 64384 116136353 192.168.105.200 8080 0
    S 192.168.105.36 48904 2176134696 192.168.105.200 8080 0
    SA 192.168.105.200 8080 2678238607 192.168.105.36 48904 2176134697
    S 192.168.105.36 48905 2165292244 192.168.105.200 8080 0
    SA 192.168.105.200 8080 2678238607 192.168.105.36 48904 2176134697

  3. #23
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 391
    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 391
    Par défaut
    Il faut dire que je n'ai pas cherché à corriger la segfault, seulement les problèmes de const-correctness.
    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.

  4. #24
    Membre confirmé
    Inscrit en
    Août 2007
    Messages
    88
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 88
    Par défaut
    Citation Envoyé par Médinoc Voir le message
    Il faut dire que je n'ai pas cherché à corriger la segfault, seulement les problèmes de const-correctness.
    ba si tu peux m'aider je serai ravi encore une fois

  5. #25
    Membre confirmé
    Inscrit en
    Août 2007
    Messages
    88
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 88
    Par défaut alors il n'y pas de solution
    Citation Envoyé par Médinoc Voir le message
    Il faut dire que je n'ai pas cherché à corriger la segfault, seulement les problèmes de const-correctness.
    alors il n'ya pas de solution pour ce problemme de segfaul,t

  6. #26
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 391
    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 391
    Par défaut
    Il y a toujours une solution, mais j'ai du mal à comprendre ton code, et je n'ai pas le temps maintenant (je suis au boulot).
    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.

  7. #27
    Membre confirmé
    Inscrit en
    Août 2007
    Messages
    88
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 88
    Par défaut ba qcq chose pour me guider
    Citation Envoyé par Médinoc Voir le message
    Il y a toujours une solution, mais j'ai du mal à comprendre ton code, et je n'ai pas le temps maintenant (je suis au boulot).
    ba si tu sai qcq chose qui peu me guider a le corriger

  8. #28
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 633
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 633
    Par défaut
    Salut,

    Tu pourrais déjà énormément simplifier ton code si tu envisageait de lancer une exception plutôt que de vouloir gérer les erreurs directement dans le code... Alors que, typiquement, les erreurs devraient être gérées "en dehors de la fonctions dans laquelle elles surviennent"

    Par exemple, la fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void Verifir_Sys(unsigned char filter[], char const *filename, char const *filename1)
    serait déjà beaucoup plus facile à lire si elle lançait simplement uen exception si le fichier n'a pas pu être ouvert sous la forme de
    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
    void Verifir_Sys(unsigned char filter[], char const *filename, 
                     char const *filename1)
    {
    	string AdrePortSour;
    	string AdrePortDest;
    	int test;
    	fstream fichier(filename);
    	fstream fichiersysAck(filename1);
    	if ( !fichier )  // si le fichier n'est pas trouvé
                    /* nous faisons remonter une exception jusqu'à ce que nous
                     * soyons en mesure de gérer ce fait 
                     * (ce qui peut se limiter à un simple affichage de la
                     * fonction what() dans un "catch" de la fonction principale)
                     */
    		throw std::runtime_error("file couldn't be opened");
    	 // si on arrive ici, le fichier a pu etre ouvert
            /* le reste de la fonction */
    }
    Cette même fonction serait en outre sans doute considérablement simplifiée si tu décidais de lire directement une ligne de fichier complète et d'utiliser les fonctions find, rfind, substr (par exemple) dans ton traitement

    Cela pourrait se transformer en une boucle proche de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    std::string line; // déclarons une chaine de caractère qui correspond
                      // à la ligne de fichier complète
    while(std::getline(fichier, line)) // tant qu'on arrive à lire une ligne 
                                       // dans le fichier
    {
        /* ce qui doit être fait en utilisant "principalement" line.find, 
         * line.substr voire, pourquoi pas, les (i/o)stringstream ;)
         */
    }
    Pour info, size_t est un simple alias de type sur des ... unsigned int (ou unsigned long, dépendamment de l'implémentation)...

    L'idéal est donc, comme tu passe régulièrement des size_t comme paramètre de len (au fait, pourquoi ne pas, tout simplement passer des références constantes sur des std::string ... de cette manière, la taille serait directement connue de la chaine passée en paramètres, et c'est compatible avec des const char* ), de manipuler tout simplement des... size_t...

    La ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    unsigned int hash = static_cast<unsigned int>(len);
    que l'on rencontre dans quelques fonctions deviendrait inutile

    D'un autre coté, la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    const unsigned int BitsInUnsignedInt = static_cast<unsigned int>(sizeof(unsigned int)) * 8;
    issue de la fonction unsigned int PJWHash(unsigned char const *str, size_t len) effectue, encore une fois, une conversion inutile car sizeof() renvoie... un size_t, c'est à dire... un unsigned int


    Pour le reste, les erreurs de segmentation (SEGVAULT, SIGSEGV,...) sont typiquement dues au fait que tu essaye d'accéder à une adresse invalide, soit
    parce que tu continue à manipuler un pointeur alors que la libération de la mémoire pointée a déjà eu lieu, soit parce que tu travailles sur une référence qui a été invalidée du fait de la destruction de la variable d'origine

    il serait donc peut être opportun de vérifier, entre autres, tous les (*str) afin de vérifier si le pointeur str est bel et bien valide (première idée me venant en tête
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  9. #29
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 391
    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 391
    Par défaut
    koala01, tu penses encore trop en 32 bits.
    La conversion size_t --> unsigned int n'est PAS inutile ici.
    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.

  10. #30
    Membre confirmé
    Inscrit en
    Août 2007
    Messages
    88
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 88
    Par défaut mai ce n'est pas le problemme
    Citation Envoyé par Médinoc Voir le message
    koala01, tu penses encore trop en 32 bits.
    La conversion size_t --> unsigned int n'est PAS inutile ici.
    le code compile et lorsque je l'execute il m'affiche segmentation fault et sa fai des jour que je change et sa ne donne rien alors aider moi svp

  11. #31
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 633
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 633
    Par défaut
    Citation Envoyé par Médinoc Voir le message
    koala01, tu penses encore trop en 32 bits.
    La conversion size_t --> unsigned int n'est PAS inutile ici.
    Il est malheureusement vrai que le fait de travailler avec un antique 32 bits, monocorps et même pas DDRAM ne facilite pas le fait de penser autrement que ...32 bits

    Ceci dit, à partir du moment où tu manipule des constantes dont tu sais d'avance qu'elles ont des size_t (quelle que soit leur type réel) comme origine, je ne vois franchement pas pourquoi la conversion deviendrait nécessaire

    Quand tu y regarde d'un peu plus près, il n'y a que dans DEKHash que la conversion de l'argument len en unsigned int semble réellement utile ...

    Dans toutes les autres fonctions, les constantes basées sur la valeur de len pourraient parfaitement être de type... (const) size_t
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  12. #32
    Membre confirmé
    Inscrit en
    Août 2007
    Messages
    88
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 88
    Par défaut
    Citation Envoyé par koala01 Voir le message
    Il est malheureusement vrai que le fait de travailler avec un antique 32 bits, monocorps et même pas DDRAM ne facilite pas le fait de penser autrement que ...32 bits

    Ceci dit, à partir du moment où tu manipule des constantes dont tu sais d'avance qu'elles ont des size_t (quelle que soit leur type réel) comme origine, je ne vois franchement pas pourquoi la conversion deviendrait nécessaire

    Quand tu y regarde d'un peu plus près, il n'y a que dans DEKHash que la conversion de l'argument len en unsigned int semble réellement utile ...

    Dans toutes les autres fonctions, les constantes basées sur la valeur de len pourraient parfaitement être de type... (const) size_t
    Et mon problème de segmentation fault c'est ça sa cause ?????

  13. #33
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 633
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 633
    Par défaut
    Citation Envoyé par selmani300 Voir le message
    et mon problemmme dsegmentaion fault cé sa sa cause ?????
    Heuu...Non... pas vraiment...

    C'était surtout une réponse à la remarque de Médinoc sur le fait que je pensais encore en 32 bits

    Pour ton problème de segvault, l'idéal serait surement de passer par le débugger et de vérifier en priorité l'adresse pointée par les différents pointeurs
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  14. #34
    Membre confirmé
    Inscrit en
    Août 2007
    Messages
    88
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 88
    Par défaut
    Citation Envoyé par koala01 Voir le message
    Heuu...Non... pas vraiment...

    Pour ton problème de segvault, l'idéal serait surement de passer par le débugger et de vérifier en priorité l'adresse pointée par les différents pointeurs
    J'utilise vi sous unix pour programmer, alors qu'est-ce que je dois utiliser pour faire ce que tu m'as dit ?

  15. #35
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Par défaut
    Il va falloir que tu debuggue ton programme avec gdb.

    Pour apprendre à l'utiliser :

    N'hésite pas à passer du temps avec, c'est un investissement. C'est l'outil que l'on utilise le plus souvent pour savoir pourquoi ca va mal.

    Donc lit et relit, teste ton code avec, tu verras, tu ne pourras plus t'en passer.
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

Discussions similaires

  1. Que fait cette ligne de code
    Par netsupra dans le forum jQuery
    Réponses: 2
    Dernier message: 06/05/2014, 11h57
  2. que fait cette fonction(5 lignes)
    Par router_ dans le forum Débuter
    Réponses: 4
    Dernier message: 14/06/2010, 08h52
  3. Que signifie cette ligne de code ?
    Par ysahel dans le forum Débuter
    Réponses: 3
    Dernier message: 22/01/2010, 13h07
  4. Que fait cette ligne de code ?
    Par ANOVA dans le forum MATLAB
    Réponses: 9
    Dernier message: 17/07/2008, 09h20
  5. Que fait cette requête?
    Par noinneh dans le forum Langage SQL
    Réponses: 8
    Dernier message: 12/10/2005, 19h38

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