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

Bibliothèque standard C Discussion :

error : glibc detected


Sujet :

Bibliothèque standard C

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2005
    Messages : 42
    Points : 33
    Points
    33
    Par défaut error : glibc detected
    Salut à tous,

    j'ai une erreur lors de l'éxécution de mon programme et j'ai déjà tout fait pour la trouver mais rien n'y fait je suis bloqué...

    Voici la partie de code "foireuse" :
    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    printf("Correspondance : %d\n",numberPointCoresp);
    Container* tmpModel = NULL;
    printf("ici1.1111555\n");
    tmpModel = malloc(sizeof(Container));
    printf("ici1.1111\n");
    for(int a = 0;a < NBR_POINT;a++) 
    	tmpModel->inliers[a] = 0;
     
    printf("ici1.1\n");

    et voici l'erreur lors de l'exécution :
    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
    Correspondance : 669
    ici1.1111555
    *** glibc detected *** ./Vision: corrupted double-linked list: 0x086e7b80 ***
    ======= Backtrace: =========
    /lib/tls/i686/cmov/libc.so.6[0xb7cd03f9]
    /lib/tls/i686/cmov/libc.so.6[0xb7cd21bd]
    /lib/tls/i686/cmov/libc.so.6(__libc_malloc+0x90)[0xb7cd3fc0]
    ./Vision[0x8049237]
    ./Vision[0x804b649]
    /lib/tls/i686/cmov/libc.so.6(__libc_start_main+0xe0)[0xb7c7e050]
    ./Vision[0x8048b31]
    ======= Memory map: ========
    08048000-0804d000 r-xp 00000000 08:04 102659     /home/philippe/Desktop/Vision_Harris_Homographie/Debug/Vision
    0804d000-0804e000 rw-p 00004000 08:04 102659     /home/philippe/Desktop/Vision_Harris_Homographie/Debug/Vision
    0804e000-0a3da000 rw-p 0804e000 00:00 0          [heap]
    b1147000-b65f0000 rw-p b1147000 00:00 0 
    b6700000-b6721000 rw-p b6700000 00:00 0 
    b6721000-b6800000 ---p b6721000 00:00 0 
    b6896000-b68e2000 rw-p b6896000 00:00 0 
    b6a10000-b6a2f000 r--p 00000000 08:01 410131     /usr/share/locale-langpack/fr/LC_MESSAGES/libc.mo
    b6a2f000-b6a41000 r-xp 00000000 08:01 131155     /usr/lib/gtk-2.0/2.10.0/engines/libubuntulooks.so
    b6a41000-b6a42000 rw-p 00011000 08:01 131155     /usr/lib/gtk-2.0/2.10.0/engines/libubuntulooks.so
    b6a42000-b6a67000 r--p 00000000 08:01 407464     /usr/share/locale-langpack/fr/LC_MESSAGES/gtk20-properties.mo
    b6a67000-b6a70000 r-xp 00000000 08:01 1777218    /lib/tls/i686/cmov/libnss_files
    ...
    Je n'ai pas affiché toute la trace, si vous estimez qu'elle pourrait vous être utile pour répondre à ma question n'hésitez pas à me la demander.

    J'espère que vous allez pouvoir me debloquer...

    Un tout grand merci d'avance,

    Philippe

  2. #2
    Membre éclairé Avatar de valefor
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    711
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 711
    Points : 790
    Points
    790
    Par défaut
    Comment est déclarée ta structure container ?

  3. #3
    Rédacteur
    Avatar de Arnaud F.
    Homme Profil pro
    Développeur COBOL
    Inscrit en
    Août 2005
    Messages
    5 183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Développeur COBOL
    Secteur : Finance

    Informations forums :
    Inscription : Août 2005
    Messages : 5 183
    Points : 8 873
    Points
    8 873
    Par défaut
    Salut,

    ne serait-ce pas :
    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    tmpModel = malloc(sizeof(Container));

    Il faut rajouter une *, ce qui donne :
    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    tmpModel = malloc(sizeof(Container*));

    Non?
    C'est par l'adresse que vaut le bûcheron, bien plus que par la force. Homère

    Installation de Code::Blocks sous Debian à partir de Nightly Builds

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2005
    Messages : 42
    Points : 33
    Points
    33
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    typedef struct Container_t {
    	int inliers[NBR_POINT];
    	int nbrInliers;
    	CvMat* homography;
    	struct Container_t* next;
    } Container;
    Ce qui est bizarre c'est que le code fonctionne dans une boucle...donc cela fonctionne bien puis à un moment y'a une erreur sur ce code...

    Buchs : je ne pense pas que cela soit ça

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    865
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 865
    Points : 1 069
    Points
    1 069
    Par défaut
    Ce code ne me paraît pas suffisant pour comprendre ce qui se passe.
    Pourrais-tu faire un programme minimaliste ayant le même problème ?

    printf étant bufferisé, tu n'es pas sûr d'afficher le dernier message. Après chacun de tes printf, flushe stdout (fflush (stdout); ) ou compile en debug et utilise un debugger pour réellement savoir où ça plante.

    Au passage, il vaut mieux faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     tmpModel = malloc(sizeof *tmpModel);
    Tu pourras changer le type de tmpModel sans surprise par la suite.

  6. #6
    Expert éminent sénior

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 603
    Points : 17 913
    Points
    17 913
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par aoyou Voir le message
    printf étant bufferisé, tu n'es pas sûr d'afficher le dernier message. Après chacun de tes printf, flushe stdout (fflush (stdout); ) ou compile en debug et utilise un debugger pour réellement savoir où ça plante.
    ou plus simple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fprintf ( stderr, "....");
    qui est synchrone..... et qui est fait pour...
    "Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".

    Consultant indépendant.
    Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
    C, Fortran, XWindow/Motif, Java

    Je ne réponds pas aux MP techniques

  7. #7
    Membre éprouvé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    865
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 865
    Points : 1 069
    Points
    1 069
    Par défaut
    Hum, je ne dirais pas fait pour. Il permet en premier lieu de séparer les erreurs du flux de sortie standard. Mais oui tu peux aussi utiliser fprintf (stderr, ...) qui a l'avantage de ne pas être bufferisé. Mais personnellement, rien ne vaut un bon vieux debugger pour savoir tout de suite où ça plante...

  8. #8
    Membre Expert

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Points : 5 724
    Points
    5 724
    Par défaut
    si tu as un code qui est compilable cela peut aider
    " Dis ce que tu veux qui insulte mon honneur car mon silence sera la réponse au mesquin.
    Je ne manque pas de réponse mais : il ne convient pas aux lions de répondre aux chiens ! " [Ash-Shafi'i ]

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2005
    Messages : 42
    Points : 33
    Points
    33
    Par défaut
    j'ai trouvé...
    À un moment donné j'allais trop loin avec un pointeur

  10. #10
    Membre à l'essai
    Inscrit en
    Mars 2007
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 43
    Points : 20
    Points
    20
    Par défaut
    Tu pourrais un peu plus détailler ta correction stp ? Car j'ai un problème similaire.

  11. #11
    Membre Expert

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Points : 5 724
    Points
    5 724
    Par défaut
    [QUOTE=Ph.denis;2963033]Salut à tous,


    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    printf("Correspondance : %d\n",numberPointCoresp);
    Container* tmpModel = NULL;
    printf("ici1.1111555\n");
    tmpModel = malloc(sizeof(Container));
    printf("ici1.1111\n");
    for(int a = 0;a < NBR_POINT;a++) 
    	tmpModel->inliers[a] = 0;
     
    printf("ici1.1\n");

    si inliers est un membre de type pointeur il faut faire également l'allocation. la question est comment déclares-tu inliers


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    struct Container{
      int *inliers;
    //ou
    int inliers[NBR_POINT];
    };
    " Dis ce que tu veux qui insulte mon honneur car mon silence sera la réponse au mesquin.
    Je ne manque pas de réponse mais : il ne convient pas aux lions de répondre aux chiens ! " [Ash-Shafi'i ]

  12. #12
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    613
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 613
    Points : 406
    Points
    406
    Par défaut
    Citation Envoyé par inh40 Voir le message
    Tu pourrais un peu plus détailler ta correction stp ? Car j'ai un problème similaire.
    Il avait un problème de mémoire apparemment, il lisait ou écrivait dans une zone mémoire invalide, donc vérifie si tu ne fait pas ce genre d'erreur.

  13. #13
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par Ph.denis Voir le message
    Voici la partie de code "foireuse" :
    Ton code est incomplet et ne peut être testé. Ceci fonctionne (merci pour les 15 minutes de rétro-ingéniérie...) :
    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
     
    #include <stdio.h>
    #include <stdlib.h>
     
    #define NBR_POINT 10
     
    typedef struct
    {
       int inliers[NBR_POINT];
    }
    Container;
     
    int main (void)
    {
       Container *tmpModel = NULL;
       printf ("%s:%d\n", __FILE__, __LINE__);
       tmpModel = malloc (sizeof (Container));
       printf ("%s:%d\n", __FILE__, __LINE__);
       {
          int a;
          for (a = 0; a < NBR_POINT; a++)
          {
             tmpModel->inliers[a] = 0;
          }
       }
       printf ("%s:%d\n", __FILE__, __LINE__);
       return 0;
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    main.c:15
    main.c:17
    main.c:25
     
    Press ENTER to continue.
    Pas de Wi-Fi à la maison : CPL

  14. #14
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    613
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 613
    Points : 406
    Points
    406
    Par défaut
    Citation Envoyé par Emmanuel Delahaye Voir le message
    Ton code est incomplet et ne peut être testé. Ceci fonctionne (merci pour les 15 minutes de rétro-ingéniérie...) :
    le PO a résolut son problème depuis le 19/02/2008

  15. #15
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par pasdeface Voir le message
    le PO a résolut son problème depuis le 19/02/2008
    Oui, mais visiblement, quelqu'un (inh40) a besoin de précision...
    Pas de Wi-Fi à la maison : CPL

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

Discussions similaires

  1. erreur glibc detected double free or corruption.
    Par Screwt-K dans le forum C++
    Réponses: 1
    Dernier message: 02/07/2007, 16h46
  2. glibc detected.. realloc pbm
    Par djynwk dans le forum C
    Réponses: 3
    Dernier message: 28/04/2007, 19h13
  3. * glibc detected * free(): invalid pointer
    Par ViRouF dans le forum C
    Réponses: 4
    Dernier message: 28/03/2007, 17h10
  4. [Debutant]*** glibc detected *** free()
    Par Treuze dans le forum Débuter
    Réponses: 3
    Dernier message: 17/03/2006, 15h34
  5. Réponses: 5
    Dernier message: 04/11/2005, 18h59

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