Erreur de segmentation avec un main vide

Erreur de segmentation avec un main vide - C - Programmation

Marsh Posté le 21-04-2007 à 18:07:14    

Bonjour,
 
Je suis actuellement en cours de developpement d'un systeme client-server securisé avec openssl en langage C.
Pour l'instant, je n'ai fais que le serveur. La compil passe nickel.
Mon probleme est que lorsque que je lance mon server, ma fenetre shell de ferme instantannément. Le mode debug fait reference a une erreur de segmentation.  
En commentant le code, je me suis rendu compte que c'est l'utilisation de fonction issues de la librairie openssl qui provoquait cette erreur.
Je connais bien cette erreur mais c'est la première fois que je la vois apparraitre sans que rien ne soit appelé car mon main ne contient qu'un "int d = getch();". D'autant plus que ce meme programme marche sur la machine d'un copin.
 
Savez vous comment regler ce probleme autrement que d'essayer de reinstaller l'OS?
 
Merci d'avance !
 
Je precise que utilise Devc++ (ou devblock), la librairie open ssl est installée sur windows et mise a jour.
 
Voici mon code:
 

Code :
  1. ///////////////////////////////////////////////////////
  2. /////////////////// common.h ///////////////////////
  3. ///////////////////////////////////////////////////////
  4. #ifndef COMMON_H
  5. #define C0MMON_H
  6. #include <openssl/ssl.h>
  7. #include <openssl/err.h>
  8. #include <winsock2.h>
  9. #include <conio.h>
  10. SOCKET  fd;
  11. SSL_CTX *SSL_ctx;  // SSL context
  12. SSL  *SSL_fd;  // SSL socket
  13. struct sockaddr_in address;
  14. int  server_len;
  15. void error(char* s);
  16. int write_message(char *msg);
  17. int read_message(char *msg);
  18. #endif
  19. ///////////////////////////////////////////////////////
  20. /////////////////// common.c ///////////////////////
  21. ///////////////////////////////////////////////////////
  22. #include "common.h"
  23. struct sockaddr_in address;
  24. void error(char* s) {
  25.     printf("%s\a\n",s);
  26.     getche();
  27.     exit(1);
  28. }
  29. int write_message(char *msg)
  30. {
  31. int i = SSL_write(SSL_fd,msg,strlen(msg));
  32. if ( i <= 0) // if SSL_write failed
  33.  error("Couldn't write" );
  34. else
  35.     return i; // if successfull returns number of bytes sent
  36. }
  37. int read_message(char *msg)
  38. {
  39. int i = SSL_read(SSL_fd,msg,strlen(msg));
  40. if ( i <= 0) // if SSL_read failed
  41.         error("Couldn't read the message" );
  42. else {
  43.     msg[i] = '\0';
  44.  return i;  // if successfull returns number of bytes received
  45. }
  46. }
  47. int main() {
  48.     char d  = getch();
  49.     return 0 ;
  50. }


Reply

Marsh Posté le 21-04-2007 à 18:07:14   

Reply

Marsh Posté le 21-04-2007 à 18:18:09    

Code :
  1. int getch(void);


 
ça vient peut etre de là... j'ai des doutes quand même...
que dis gdb exactement ?


---------------
Blog photo/récits activités en montagne http://planetcaravan.net
Reply

Marsh Posté le 21-04-2007 à 23:11:06    

Non je ne pense pas, j'ai essayé avec scanf j'ai le meme probleme.
Si je supprime l'appel aux fonctions SSL_write et SSL_read par exemple (meme si elle ne sont jamais appelées dans le main), le programme fonctionne.
 
Si gdb est le debugger, ca me sort une boite de dialogue de type warning dont le message est "Une violation d'accès (erreur de segmentation) est apparue dans votre programme"


Message édité par matique le 21-04-2007 à 23:19:17
Reply

Marsh Posté le 22-04-2007 à 07:08:19    

=> Probleme résolu par la mise a jour de ssleay32.dll et ws2_32.DLL directement dans system32 et non pas dans le repertoire avec l'exe.
 
Merci a tous pour votre aide!

Reply

Marsh Posté le 22-04-2007 à 10:17:21    

matique a écrit :

Merci a tous pour votre aide!


De rien  :D  
It's our job  :sol:


Message édité par Sve@r le 22-04-2007 à 10:17:43

---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Reply

Sujets relatifs:

Leave a Replay

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