Segmentation fault et make pointer from interger without a cast

Segmentation fault et make pointer from interger without a cast - C - Programmation

Marsh Posté le 10-05-2008 à 19:45:54    

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
Reply

Marsh Posté le 10-05-2008 à 19:45:54   

Reply

Marsh Posté le 11-05-2008 à 11:45:44    

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

Reply

Marsh Posté le 11-05-2008 à 12:11:21    

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

Reply

Marsh Posté le 11-05-2008 à 12:17:16    

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]

Reply

Marsh Posté le 11-05-2008 à 12:26:25    

[:jpa]  
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 11-05-2008 à 12:31:42    

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+,
 


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 12-05-2008 à 02:51:48    

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

Reply

Marsh Posté le 12-05-2008 à 14:30:49    

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


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 12-05-2008 à 15:45:58    

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é.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed