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

Réseau C Discussion :

Erreur de segmentation avec un main vide


Sujet :

Réseau C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Février 2006
    Messages
    62
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 62
    Par défaut Erreur de segmentation avec un main vide
    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 code::blocks), la librairie open ssl est installée sur windows et mise a jour.

    Voici mon code:
    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    ///////////////////////////////////////////////////////
    /////////////////// common.h ///////////////////////
    ///////////////////////////////////////////////////////
    #ifndef COMMON_H
    #define C0MMON_H
     
    #include <openssl/ssl.h>
    #include <openssl/err.h>
    #include <winsock2.h>
    #include <conio.h>
     
    SOCKET  fd;
    SSL_CTX *SSL_ctx;		// SSL context
    SSL		*SSL_fd;		// SSL socket
    struct	sockaddr_in address;
    int		server_len;
     
    void error(char* s);
    int write_message(char *msg);
    int read_message(char *msg);
     
    #endif
     
     
     
    ///////////////////////////////////////////////////////
    /////////////////// common.c ///////////////////////
    ///////////////////////////////////////////////////////
     
    #include "common.h"
     
    struct	sockaddr_in address;
     
    void error(char* s) {
        printf("%s\a\n",s);
        getche();
        exit(1);
    }
     
    int write_message(char *msg)
    {
    	int i = SSL_write(SSL_fd,msg,strlen(msg));
    	if ( i <= 0)	// if SSL_write failed
    		error("Couldn't write");
    	else
    	    return i;	// if successfull returns number of bytes sent
    }
     
    int read_message(char *msg)
    {
    	int i = SSL_read(SSL_fd,msg,strlen(msg));
    	if ( i <= 0)	// if SSL_read failed
            error("Couldn't read the message");
    	else {
    	    msg[i] = '\0';
    		return i;		// if successfull returns number of bytes received
    	}
    }
     
    int main() {
        char d  = getch();
        return 0 ;
    }

  2. #2
    Membre éclairé Avatar de Bayard
    Inscrit en
    Juin 2002
    Messages
    863
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 863
    Par défaut
    Pouvez-vous télécharger code::blocks et vérifier cela ?

    http://www.codeblocks.org/

  3. #3
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    nomal que ça s'arrête tout de suite : comme ton main ne fait rien il retourne 0 tout de suite et termine...

    pourquoi ne pas utiliser getc ? Je ne connais pas getch, mais d'après ce que j'ai pu lire ici, ça n'a pas l'aire terrible. Et conio.h n'est pas du C standard.

    En plus très très mauvaise habitude de mettre un truc comme ça dans une initialisation de variable. Qu'est-ce que ça coûte de le faire proprement ?

  4. #4
    Membre confirmé
    Inscrit en
    Février 2006
    Messages
    62
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 62
    Par défaut
    Pouvez-vous télécharger code::blocks et vérifier cela ?

    http://www.codeblocks.org/
    J'ai déjà fait la meme chose avec ce logiciel (pardon d'avoir mentionné devblock au lieu de code::blocks => corrigé) on obtient les meme symptomes d'autant plus la version openssl n'y est pas a jour contrairement a devC++.
    Mais comme je le disais ce n'est apparamment pas un problème de compilation puisque tout se deroule bien et que mon programme marche sur d'autre pc windows. Donc ca sera plutot ma mon OS qui est en cause. A noter que ces symptomes peuvent apparaitre si l'on ne possede pas certaines dll mais j'ai deja vérifier cette issue.
    Le tout est ce savoir ce qu'il manque sur mon pc ^^

    nomal que ça s'arrête tout de suite : comme ton main ne fait rien il retourne 0 tout de suite et termine...
    Si tu avais cherché un peu plus loin, tu aurais compris que getch() permet de recuperer un caractere donc le programme ne doit pas se ferme tant qu'un caractère n'est pas rentré par l'utilisateur.

    pourquoi ne pas utiliser getc ? Je ne connais pas getch, mais d'après ce que j'ai pu lire ici, ça n'a pas l'aire terrible. Et conio.h n'est pas du C standard.
    Le fonction getc n'as rien a voir. Elle est utilisée pour manipuler des fichiers.... En revenche j'aurai pu utiliser scanf ou getche mais de toutes facon ca ne change vraiment rien au probleme.

    En plus très très mauvaise habitude de mettre un truc comme ça dans une initialisation de variable. Qu'est-ce que ça coûte de le faire proprement ?
    Ceci n'est qu'un exemple de fonction main qui fonctionne parfaitement. Donc ne vous en faites pas je code proprement en tant normal
    Merci toutefois pour vos conseils ^^

  5. #5
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par matique
    ...
    Le fonction getc n'as rien a voir. Elle est utilisée pour manipuler des fichiers.... En revenche j'aurai pu utiliser scanf ou getche mais de toutes facon ca ne change vraiment rien au probleme.
    ...
    Oui tu as raison j'étais pas au mieux de ma forme cette après-midi...

    Par contre d'une part getch n'est pas du C standard, et je ne sais pas comment elle se comporte. scanf plus (bien que déconseillée).

    En tous cas, pour tester, tu devrais essayer avec scanf.

    Citation Envoyé par matique
    Ceci n'est qu'un exemple de fonction main qui fonctionne parfaitement. Donc ne vous en faites pas je code proprement en tant normal
    Merci toutefois pour vos conseils ^^
    ça n'empêche pas de faire un code correct surtout quand il n'y a que 4 lignes....

  6. #6
    Membre confirmé
    Inscrit en
    Février 2006
    Messages
    62
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 62
    Par défaut
    J'ai essayé avec scanf ca ne change rien

  7. #7
    Expert confirmé
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Par défaut
    Citation Envoyé par matique
    Le fonction getc n'as rien a voir. Elle est utilisée pour manipuler des fichiers.... En revenche j'aurai pu utiliser scanf ou getche mais de toutes facon ca ne change vraiment rien au probleme.
    Ouais enfin stdin n'est rien d'autre qu'un fichier hein. Donc getc fonctionne très bien sur l'entrée standard.

    Pour ton code, c'est bizarre tu n'appelles jamais la fonction.

    D'autant plus que si ton code fonctionne chez quelqu'un d'autre le problème vient de ta machine.

  8. #8
    Membre confirmé
    Inscrit en
    Février 2006
    Messages
    62
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 62
    Par défaut
    Oui tu as raison ca marche sur l'entrée standard

    Le probleme viens effectivement de mon systeme. Mais je ne vois pas quoi changer. Je suis actuellement en train d'installer xp sur une autre partition...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. erreur de segmentation avec pyopengl et glut
    Par bourriquet_42 dans le forum OpenGL
    Réponses: 3
    Dernier message: 01/03/2009, 13h35
  2. Erreur de segmentation avec delete
    Par ValyGator dans le forum C++
    Réponses: 13
    Dernier message: 11/02/2009, 20h44
  3. Erreur de segmentation avec fclose
    Par sylvanus35 dans le forum Débuter
    Réponses: 7
    Dernier message: 09/08/2008, 05h33
  4. Erreur de segmentation avec libxml2
    Par DevMg dans le forum XML
    Réponses: 0
    Dernier message: 18/02/2008, 14h44
  5. Erreur de segmentation avec RSA_verify
    Par LorDjidane dans le forum C
    Réponses: 7
    Dernier message: 14/06/2007, 11h29

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