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

C Discussion :

C, mysql.h et "Segmentation fault" :/


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    22
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Janvier 2008
    Messages : 22
    Par défaut C, mysql.h et "Segmentation fault" :/
    Bonsoir,

    J'aurais une question concernant un petit souci que je rencontre depuis hier soir maintenant. Je développe
    une application en C sous Debian Etch. Elle se compose de deux modules que j'ai développé séparément :

    - Un premier qui vérifie le résultat d'une requête HTTP et qui autorise ou non la poursuite de l'exécution
    de l'applicatif

    - Un second qui se connecte à une base de données et fait son méli-mélo d'actions.

    Mon souci a commencé lorsque j'ai souhaité assembler ces deux modules. J'ai réussi à faire des librairies,
    à faire mes fichiers d'entête, à les intégrer à mon programme principal et à utiliser les fonctions. Aucune
    erreur ni avertissement ne s'affiche lors de la compilation de mon programme.

    Seulement voilà, lors de son exécution, j'obtiens un "Segmentation Fault". J'ai trouvé sur Internet comment
    faire pour débugger une application en C et j'ai trouvé l'outil gdb. J'ai réussi à sortir ces informations :

    ns1:/usr/src/# gdb poller
    GNU gdb 6.4.90-debian
    Copyright (C) 2006 Free Software Foundation, Inc.
    GDB is free software, covered by the GNU General Public License, and you are
    welcome to change it and/or distribute copies of it under certain conditions.
    Type "show copying" to see the conditions.
    There is absolutely no warranty for GDB. Type "show warranty" for details.
    This GDB was configured as "i486-linux-gnu"...Using host libthread_db library "/lib/tls/i686/cmov/libthread_db.so.1".

    (gdb) r
    Starting program: /usr/src//poller
    Failed to read a valid object file image from memory.
    [Thread debugging using libthread_db enabled]
    [New Thread -1212082496 (LWP 11601)]
    Checking licence... This may take some seconds...
    Licence check : Ok.
    Initialisation du client MySQL...
    Initialisé.
    Définition de l'environnement du client MySQL...
    Définit.
    Connexion au serveur MySQL...

    Program received signal SIGSEGV, Segmentation fault.
    [Switching to Thread -1212082496 (LWP 11601)]
    0xb7d0772d in free () from /lib/tls/i686/cmov/libc.so.6
    (gdb) bt
    #0 0xb7d0772d in free () from /lib/tls/i686/cmov/libc.so.6
    #1 0xb7e1adf1 in my_no_flags_free () from /usr/lib/libmysqlclient.so.15
    #2 0xb7e3ed8c in mysql_real_query () from /usr/lib/libmysqlclient.so.15
    #3 0xb7e413a8 in mysql_real_connect () from /usr/lib/libmysqlclient.so.15
    #4 0x08048fda in main () at poller.c:50
    (gdb) frame 0
    #0 0xb7d0772d in free () from /lib/tls/i686/cmov/libc.so.6
    (gdb) frame 1
    #1 0xb7e1adf1 in my_no_flags_free () from /usr/lib/libmysqlclient.so.15
    (gdb) frame 2
    #2 0xb7e3ed8c in mysql_real_query () from /usr/lib/libmysqlclient.so.15
    (gdb) frame 3
    #3 0xb7e413a8 in mysql_real_connect () from /usr/lib/libmysqlclient.so.15
    (gdb) frame 4
    #4 0x08048fda in main () at poller.c:50
    50 if (!mysql_real_connect(MySQL_Link, MYSQL_HOST, MYSQL_USER, MYSQL_PASS, MYSQL_BASE, 0, NULL, 0)) {
    Pour information, je vous ai mis à disposition les fichiers sources :

    poller.c http://pastebin.deus-rulez.com/pastebin.php?show=10
    deb_licence.c http://pastebin.deus-rulez.com/pastebin.php?show=11

    Ainsi qu'un petit package global du projet (il n'y a pas grand chose) : http://www.deus-rulez.com/c_bugs.tar.gz

    Auriez vous une idée de solution ? J'ai cherché sur Internet et je n'ai trouvé aucune information.

    Merci par avance pour vos lumières,

    Havran

    PS : gcc version 4.1.2 20061115 (prerelease) (Debian 4.1.1-21)

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 52
    Par défaut
    Le pointeur MySQL_Link passé en paramètre à mysql_real_connect n'est pas initialisé.

    Pourquoi la ligne

    MySQL_Link = mysql_init(NULL);

    est en commentaire ?.
    Il peut y avoir d'autres problèmes, mais ça, c'est pas bon.

    http://doc.domainepublic.net/mysql/d...ysql_init.html

    Bonne continuation

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    22
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Janvier 2008
    Messages : 22
    Par défaut
    Merci pour me rappeler cet oubli.

    J'ai modifié la source, en effet j'avais oublié de décommenter ces lignes.
    Cependant, le problème persiste avec d'autres erreurs du même genre.

    Voici le nouveau poller.c : http://pastebin.deus-rulez.com/pastebin.php?show=12

    Et les nouvelles traces du gdb :

    ns1:/usr/src/# gdb poller
    GNU gdb 6.4.90-debian
    Copyright (C) 2006 Free Software Foundation, Inc.
    GDB is free software, covered by the GNU General Public License, and you are
    welcome to change it and/or distribute copies of it under certain conditions.
    Type "show copying" to see the conditions.
    There is absolutely no warranty for GDB. Type "show warranty" for details.
    This GDB was configured as "i486-linux-gnu"...Using host libthread_db library "/lib/tls/i686/cmov/libthread_db.so.1".

    (gdb) r
    Starting program: /usr/src//poller
    Failed to read a valid object file image from memory.
    [Thread debugging using libthread_db enabled]
    [New Thread -1212692800 (LWP 1667)]
    Checking licence... This may take some seconds...
    Licence check : Ok.
    Initialisation du client MySQL...

    Program received signal SIGSEGV, Segmentation fault.
    [Switching to Thread -1212692800 (LWP 1667)]
    0xb7c77eda in strcmp () from /lib/tls/i686/cmov/libc.so.6
    (gdb) bt
    #0 0xb7c77eda in strcmp () from /lib/tls/i686/cmov/libc.so.6
    #1 0xb7cea072 in __nss_database_lookup () from /lib/tls/i686/cmov/libc.so.6
    #2 0xb7ceb2eb in __nss_hostname_digits_dots ()
    from /lib/tls/i686/cmov/libc.so.6
    #3 0xb7cef95e in getservbyname_r () from /lib/tls/i686/cmov/libc.so.6
    #4 0xb7cef74e in getservbyname () from /lib/tls/i686/cmov/libc.so.6
    #5 0xb7d84752 in mysql_server_init () from /usr/lib/libmysqlclient.so.15
    #6 0xb7daa12e in mysql_init () from /usr/lib/libmysqlclient.so.15
    #7 0x0804904c in main () at poller.c:42
    (gdb) frame 0
    #0 0xb7c77eda in strcmp () from /lib/tls/i686/cmov/libc.so.6
    (gdb) frame 1
    #1 0xb7cea072 in __nss_database_lookup () from /lib/tls/i686/cmov/libc.so.6
    (gdb) frame 2
    #2 0xb7ceb2eb in __nss_hostname_digits_dots ()
    from /lib/tls/i686/cmov/libc.so.6
    (gdb) frame 3
    #3 0xb7cef95e in getservbyname_r () from /lib/tls/i686/cmov/libc.so.6
    (gdb) frame 4
    #4 0xb7cef74e in getservbyname () from /lib/tls/i686/cmov/libc.so.6
    (gdb) frame 5
    #5 0xb7d84752 in mysql_server_init () from /usr/lib/libmysqlclient.so.15
    (gdb) frame 6
    #6 0xb7daa12e in mysql_init () from /usr/lib/libmysqlclient.so.15
    (gdb) frame 7
    #7 0x0804904c in main () at poller.c:42
    42 MySQL_Link = mysql_init(NULL);
    Je ne vois toujours pas d'où peut provenir l'erreur car si je commente les lignes 32-39 qui correspondent à la première partie de l'applicatif, la seconde partie du code (ligne 41-80) fonctionnera normalement et vice versa.

    J'ai remis en ligne une seconde version des sources/binaires :
    http://www.deus-rulez.com/c_bugs_2.tar.gz

  4. #4
    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
    je n'ai pas regardé le code, mais le diagnostic est clair :

    dans le strcmp à la ligne mentionnée il y a sans doute une des 2 chaines qui est NULL....

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    22
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Janvier 2008
    Messages : 22
    Par défaut
    Une erreur de la libc livrée en "stable" avec Debian Etch ?

    J'ai beaucoup de mal à y croire... Une autre idée peut être ?

  6. #6
    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


    j'ai pas dire une erreur de la libc..

    J'ai dit : "le strcmp a une des 2 chaines qui est a NULL"

    C'est dans TON code

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

Discussions similaires

  1. [API MySQL] Segmentation fault
    Par Bisûnûrs dans le forum Bibliothèques
    Réponses: 4
    Dernier message: 16/07/2007, 17h27
  2. [REDHAT] Segmentation fault systematique
    Par mela dans le forum RedHat / CentOS / Fedora
    Réponses: 2
    Dernier message: 21/09/2004, 06h05
  3. Réponses: 13
    Dernier message: 13/07/2004, 15h41
  4. Comment contrer la "segmentation fault" ?
    Par guillaume_pfr dans le forum C
    Réponses: 15
    Dernier message: 08/08/2003, 13h43

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