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
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.
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.
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
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 void Verifir_Sys(unsigned char filter[], char const *filename, char const *filename1)
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
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 */ }
Cela pourrait se transformer en une boucle proche de
Pour info, size_t est un simple alias de type sur des ... unsigned int (ou unsigned long, dépendamment de l'implémentation)...
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 ;) */ }
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
que l'on rencontre dans quelques fonctions deviendrait inutile
Code : Sélectionner tout - Visualiser dans une fenêtre à part unsigned int hash = static_cast<unsigned int>(len);
D'un autre coté, la ligneissue 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
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 const unsigned int BitsInUnsignedInt = static_cast<unsigned int>(sizeof(unsigned int)) * 8;
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
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.
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
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
Il va falloir que tu debuggue ton programme avec gdb.
Pour apprendre à l'utiliser :
- http://c.developpez.com/tutgcc/c978.php
- http://man.developpez.com/man1/gdb.1.php
- http://mtodorovic.developpez.com/lin...e/?page=page_1
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
CafuroCafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
e-verbeUn logiciel de conjugaison des verbes de la langue française.
Ma page personnelle sur DVP.
Partager