Forum |  HardWare.fr | News | Articles | PC | Prix | S'identifier | S'inscrire | Aide Recherche
2303 connectés 

  FORUM HardWare.fr
  Programmation
  C

  Segmentation fault et make pointer from interger without a cast

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Segmentation fault et make pointer from interger without a cast

n°1730535
djaibi86
Posté le 10-05-2008 à 19:45:54  profilanswer
 

Bonjour à vous,  
 
Alors voilà j'ai un Segmentation Fault qui résulte surement du Warning. Sachant que j'ai fait un programme avec Module, donc voilà le main dans un fichier servConf.c, je n'ai rien mis dans le servConf.h.
 
 
 

Code :
  1. #include <sys/types.h>
  2. #include <sys/socket.h>
  3. #include <netinet/in.h>
  4. #include <stdio.h>
  5. #include <stdlib.h>
  6. #include <string.h>
  7. #include "../Socket/libsck.h"
  8. int main(int argc,char *argv[])
  9. {
  10. int sock_lecture;   /* Descripteur de la SOCKET */
  11. short int port=40;
  12. sock_lecture=initialisationServeur(&port);
  13. }


 
Ensuite dans un fichier libsck.c :
 

Code :
  1. #include <sys/types.h>
  2. #include <sys/socket.h>
  3. #include <netinet/in.h>
  4. #include <stdio.h>
  5. #include <stdlib.h>
  6. #include <string.h>
  7. #include <arpa/inet.h>
  8. #include <netdb.h>
  9. #include <pthread.h>
  10. #define MAX_CONNEXIONS 25
  11. int initialisationServeur(short int *port)
  12. {
  13. int df=0;
  14. struct sockaddr_in adresse;
  15. int statut;
  16. socklen_t taille=sizeof adresse;
  17. // Creation d'une socket  
  18. df=socket(PF_INET,SOCK_STREAM,0);
  19. if(df<0){
  20.         perror("initialisationServeur.socket" );
  21.         exit(1);
  22.         }
  23. // On fixe l'adresse de la socket  
  24. adresse.sin_family=AF_INET;
  25. adresse.sin_addr.s_addr=INADDR_ANY;
  26. adresse.sin_port=htons(*port);
  27. statut=bind(df,(struct sockaddr *)&adresse,sizeof(adresse));
  28. if(statut<0) return -1;
  29. printf ("adresse fixé \n" );
  30. // On recupere le numero du port utilise
  31. statut=getsockname(df,(struct sockaddr *)&adresse,&taille);
  32. if(statut<0){
  33.         perror("initialisationServeur.getsockname" );
  34.         }
  35. *port=ntohs(adresse.sin_port);
  36. printf ("recup num \n" );
  37. // Initialisation de l'ecoute
  38. statut=listen(df,MAX_CONNEXIONS);
  39. if(statut<0) return -1;
  40. printf ("init ecoute ok\n" );
  41. return df;
  42. }


 
Dans le fichier libsck.h j'ai :  
 

Code :
  1. int initialisationServeur(short int*);


 
Voilà c'est tout, pour la compilation je crée un fichier libsck.a, et ensuite je fais un gcc -o rapido servConf.o ../Socket/libsck.a (tout les fichier sont existants ect)  
 
Au final j'ai un warning :  makes integer from pointer without a cast (qui apparait dans le main à la ligne ou il y'a  sock_lecture=initialisationServeur(&port);)
 
Et j'ai un segmenation fault dans l'initialisationServeur (quand je met toute les lignes qui utilise port en commentaire le segmentation fault disparait), je suppose que ça vient de là mais je ne comprend pas du tout ...  
 
Bref si quelqu'un sait, je ne suis pas contre un peu d'aide.
 
Ps : il y'a surement plein d'include qui ne servent à rien, mais en gros j'ai un programme bien plus compliqué que j'ai simplifié au maximum pour essayer de retrouvé l'erreur et il me semble l'avoir localisé à cet endroit.
 
 
Une autre question, si j'ai oublié de libérer un File descriptor et que maintenant j'ai l'erreur Errno 98 (already in use) je fais comment pour le libérer ?


Message édité par djaibi86 le 10-05-2008 à 20:15:24
mood
Publicité
Posté le 10-05-2008 à 19:45:54  profilanswer
 

n°1730590
Profil sup​primé
Posté le 11-05-2008 à 11:45:44  answer
 

Salut,
 
Pour le "port" comme tu passe "&port", ne devrait-il être déclaré comme un pointeur sur un int ?

n°1730593
Joel F
Real men use shared_ptr
Posté le 11-05-2008 à 12:11:21  profilanswer
 

non, tu dis n'importe quoi, va jouer avec magicBuzz dans le champ de mine stp.
 
@djaibi. Quelle ligne l'erreur ?


---------------
MetaScale | Mes cartes Magic
n°1730595
Profil sup​primé
Posté le 11-05-2008 à 12:17:16  answer
 

Joel F a écrit :

non, tu dis n'importe quoi, va jouer avec magicBuzz dans le champ de mine stp.
 
@djaibi. Quelle ligne l'erreur ?


 
Pauvre tache. [:intercalaire]  [:kadreg]

n°1730596
gilou
Modérateur
It's the only NEET thing to do
Posté le 11-05-2008 à 12:26:25  profilanswer
 

[:jpa]  
A+,


---------------
I think you guys should really consider virtualizing the whole process and moving it to the cloud.
n°1730597
gilou
Modérateur
It's the only NEET thing to do
Posté le 11-05-2008 à 12:31:42  profilanswer
 

Sinon, a priori, je ne vois rien qui me semble mauvais dans le code posté, sauf peut être que l'on a des short int alors qu'il me semble que ntohs et son comparse attendent des unsigned short int.
Je serais donc interessé a savoir a quelle ligne exacte se situe le pb, moi aussi.
A+,
 


---------------
I think you guys should really consider virtualizing the whole process and moving it to the cloud.
n°1730783
Profil sup​primé
Posté le 12-05-2008 à 02:51:48  answer
 

Moi je comprends pas la ligne 28, j'aurai passé port et pas *port en argument.

n°1730850
gilou
Modérateur
It's the only NEET thing to do
Posté le 12-05-2008 à 14:30:49  profilanswer
 

Ce qui signifie que tu n'as pas lu la ligne 37.
A+,


---------------
I think you guys should really consider virtualizing the whole process and moving it to the cloud.
n°1730879
Profil sup​primé
Posté le 12-05-2008 à 15:45:58  answer
 

gilou a écrit :

Ce qui signifie que tu n'as pas lu la ligne 37.
A+,


 
Non c'est la 12 que j'avais pas lu, mal réveillé désolé.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  Segmentation fault et make pointer from interger without a cast

 

Sujets relatifs
La segmentation de la RAMSegmentation fault sur chaine de caractère. Bizarrrre
[réglé] installation qt 4.3.4 et erreur makeCourbes avec Qwt (erreur de segmentation)
un segementation fault a cause d'un fclose???[C#] Erreur de cast !!
[resolu(erreur de noob)]Probleme "segment fault"[C]Arbres et seg fault
Erreur 127 commande make g++ introuvable 
Plus de sujets relatifs à : Segmentation fault et make pointer from interger without a cast


Hit-Parade
Copyright © 1997-2012 Hardware.fr SARL / Groupe LDLC / LesNumeriques.com / Version anglaise du site: BeHardware