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 :

beug aléatoire : _int_malloc et _int_free


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Janvier 2008
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 34
    Par défaut beug aléatoire : _int_malloc et _int_free
    Bonjour,
    Je suis un peu paumé fâce au caractère aléatoire de mon code.
    Il compile et il tourne, 80% du temps sans beuguer, mais de temps en temps il plante et comme je veux qu'il soit robuste c'est embêtant.
    En débeugant les erreurs de segmentations aléatoires avec gdb, il me sort deux types d'erreurs :
    Erreur 1 :
    in free ()
    in _int_free ()
    in _libc_message ()
    in abort ()
    in raise ()
    in _dl_sysinfo_int80 ()
    Erreur 2:
    in malloc ()
    in _int_malloc ()
    [...]
    Et ce de manière aléatoire, est-ce que quelqu'un pourrait m'expliquer d'où ça vient (mémoire vive défectueuse ?) ou s'il existe des biblio pour avoir des malloc() et free() plus robustes ?
    (sachant que j'ai déjà dédoublé toutes mes allocations dynamiques de mémoires ce qui a réduit considérablement la fréquence des échecs d'allocation)

    Je précise aussi que mon programme est "multi threadé" (2 processus car biprocesseur à disposition) mais que j'ai bien réécris toutes les fonctions et toutes les variables de deux manières distinctes afin d'éviter les conflits d'accès. (au cas où)

    Un grand merci d'avance !

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par jyjeanphi Voir le message
    Bonjour,
    Je suis un peu paumé fâce au caractère aléatoire de mon code.
    Il compile et il tourne, 80% du temps sans beuguer, mais de temps en temps il plante et comme je veux qu'il soit robuste c'est embêtant.
    En débeugant les erreurs de segmentations aléatoires avec gdb, il me sort deux types d'erreurs :
    Erreur 1 :
    in free ()
    in _int_free ()
    in _libc_message ()
    in abort ()
    in raise ()
    in _dl_sysinfo_int80 ()
    Erreur 2:
    in malloc ()
    in _int_malloc ()
    [...]
    Et ce de manière aléatoire, est-ce que quelqu'un pourrait m'expliquer d'où ça vient (mémoire vive défectueuse ?) ou s'il existe des biblio pour avoir des malloc() et free() plus robustes ?
    (sachant que j'ai déjà dédoublé toutes mes allocations dynamiques de mémoires ce qui a réduit considérablement la fréquence des échecs d'allocation)

    Je précise aussi que mon programme est "multi threadé" (2 processus car biprocesseur à disposition) mais que j'ai bien réécris toutes les fonctions et toutes les variables de deux manières distinctes afin d'éviter les conflits d'accès. (au cas où)
    Je ne pense pas que les fonctions de la bibliothèque soient en cause. Il faut bien admettre que dans 99.9% des cas, les problèmes viennent du codage... Il y a 2 causes principales d'erreurs :

    • Comportement indéfini dû à l'usage d'un pointeur non initialisé
    • Comportement indéfini suite à un débordement de tableau

    Vérifie déjà ça de manière intensive

    • Contrôle visuel par un expert du langage (tu peux poster ton code)
    • Pose de pièges intelligents sur les accès au tableau en vérifiant le domaine des indices avant l'accès (assert())
    • Pose et vérification de sentinelles dans les chaines de caractères (un zéro posé à la fin du tableau ne doit jamais être effacé)[1]
    • Tests unitaires
    • Outils comme efence, valgrind etc.


    ----------------
    [1] Voir mes macros LIM_STR() et CHK_STR() dans http://delahaye.emmanuel.free.fr/clib/ed/inc/sys.h

Discussions similaires

  1. Nombre aléatoire en SQL
    Par sqlnet dans le forum Langage SQL
    Réponses: 8
    Dernier message: 19/08/2003, 12h38
  2. clé primaire aléatoire
    Par peuh dans le forum PostgreSQL
    Réponses: 8
    Dernier message: 23/06/2003, 20h51
  3. Eviter deux nombres identiques dans un tirage aléatoire
    Par moon tiger dans le forum Pascal
    Réponses: 5
    Dernier message: 25/11/2002, 09h57
  4. Générer un nombre aléatoire entre 0 et 1 (INCLUS !!!)
    Par haypo dans le forum Algorithmes et structures de données
    Réponses: 3
    Dernier message: 22/08/2002, 16h30
  5. Récupérer 10 nb différents avec un calcul aléatoire
    Par BXDSPORT dans le forum Langage
    Réponses: 3
    Dernier message: 04/08/2002, 02h35

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