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 :

Fuite mémoire avec code externe


Sujet :

C++

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 3
    Points : 4
    Points
    4
    Par défaut Fuite mémoire avec code externe
    Bonjour,

    dans un programme que j'écris, je dois intégrer du code qui n'est pas à moi et qui est bourré de fuites mémoires que je ne peiux corriger car le code est assez sioux...

    Existe-til un moyen de parer à ces fuites ? Par exemple, peut-on demander d'allouer un espace mémoire pour l'appel à ce code (c'est une fonction), qu'il fasse ses fuites dedans et qu'à la fin de la fonction on libère cet espace mémoire.

    Est-ce possible ? Comment ?

    Merci

    Sam

  2. #2
    Membre éclairé Avatar de befalimpertinent
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    561
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Avril 2007
    Messages : 561
    Points : 833
    Points
    833
    Par défaut

    Il n'existe pas de garbage collector dans le standard C++. Tu peux certes trouver une bibliothèque qui le fasse mais :
    1. Tu seras quand même obliger de toucher au code
    2. c'est une très mauvaise idée


    Les solutions possibles :
    -Vérifie les allocations/ désallocations
    -Utilise si besoin un memory leaks profiler
    -Tu peux peut être remplacer tous les pointeurs de la fonction par des smart pointeurs de Boost.
    -En aucun cas essayer de masquer de la sorte les fuites mémoires : c'est moche et dangereux

  3. #3
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 033
    Points : 13 968
    Points
    13 968

  4. #4
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 294
    Détails du profil
    Informations personnelles :
    Localisation : Royaume-Uni

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 294
    Points : 1 543
    Points
    1 543
    Par défaut
    Si tu ne peux pas toucher au code pour le corriger je ne vois pas tellement de solution à part peut-être en créant un processus externe temporaire pour faire les appels...

    MAT.

  5. #5
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 033
    Points : 13 968
    Points
    13 968
    Par défaut
    Citation Envoyé par Mat007 Voir le message
    Si tu ne peux pas toucher au code pour le corriger je ne vois pas tellement de solution à part peut-être en créant un processus externe temporaire pour faire les appels...

    MAT.
    Y as un garbadge collector pour C et C++. Mais je ne sais pas si c'est simple à utiliser
    http://www.hpl.hp.com/personal/Hans_Boehm/gc/

  6. #6
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Points : 4 625
    Points
    4 625
    Par défaut
    Existe-til un moyen de parer à ces fuites ? Par exemple, peut-on demander d'allouer un espace mémoire pour l'appel à ce code (c'est une fonction), qu'il fasse ses fuites dedans et qu'à la fin de la fonction on libère cet espace mémoire.

    Est-ce possible ? Comment ?
    Il suffit d'executer ce code dans un processus différent.

  7. #7
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 294
    Détails du profil
    Informations personnelles :
    Localisation : Royaume-Uni

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 294
    Points : 1 543
    Points
    1 543
    Par défaut
    Citation Envoyé par Mongaulois Voir le message
    Y as un garbadge collector pour C et C++.
    S'il ne peut pas toucher au code il ne pourra pas le mettre en place dessus.

    MAT.

  8. #8
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 033
    Points : 13 968
    Points
    13 968
    Par défaut
    Citation Envoyé par Mat007 Voir le message
    S'il ne peut pas toucher au code il ne pourra pas le mettre en place dessus.

    MAT.
    J'ai regardé. Il redéfinie les new, delete, malloc et free.
    Alors pourquoi pas?

  9. #9
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 629
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 629
    Points : 30 692
    Points
    30 692
    Par défaut
    Salut,

    Selon moi, l'idée d'implémenter un GC pour pallier aux fuites mémoires provoquées par un code externe n'est vraiment qu'un pis aller.

    A vrai dire, j'estime qu'il n'y aurait que deux solutions *relativement* envisageables (arpès avoir brutalement le développeur qui a osé fournir le code en l'état )
    • Soit, tu cherche une autre source qui fait un travail identique, mais de manière plus correcte, ce qui est la solution "de facilité et de rapidité", mais qui n'est applicable que si une telle source existe
    • Soit tu retrousse tes manches, tu commence par réorganiser correctement le code (indentation, et tout ce qui s'en suit), de manière à t'y retrouver un minimum et à être en mesure de traquer les fuites mémoires, et surtout, d'y remédier

    Maintenant, je me rend bien compte que les deux solutions proposées ne sont pas forcément réalisables, mais, si tu veux fournir quelque chose de qualité au final, je crains que tu n'aies pas trop le choix

Discussions similaires

  1. Détection de fuites mémoire avec Valgrind
    Par dj.motte dans le forum GTK+ avec C & C++
    Réponses: 25
    Dernier message: 22/11/2008, 08h49
  2. Fuite mémoire et code::blocks.
    Par 3DArchi dans le forum Code::Blocks
    Réponses: 2
    Dernier message: 19/09/2008, 09h34
  3. [AJAX] Appolo 13 - Fuite mémoire avec XHR
    Par mecatroid dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 24/09/2007, 14h52
  4. Fuites mémoires avec Vector
    Par ..alex.. dans le forum SL & STL
    Réponses: 15
    Dernier message: 10/08/2006, 11h35
  5. Fuite mémoire avec valgrind
    Par franchouze dans le forum C++
    Réponses: 3
    Dernier message: 05/06/2006, 16h47

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