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 :

valgrind fuite mémoire


Sujet :

C++

  1. #1
    Membre du Club
    Inscrit en
    Février 2008
    Messages
    80
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 80
    Points : 43
    Points
    43
    Par défaut valgrind fuite mémoire
    Bonjour à tous,

    J'ai exécuté mon programme avec valgrind pour détecter les fuites mémoires et j'ai le résultat ci dessous. Est ce que quelqu'un pourrait m'aider à le comprendre?
    Merci d'avance.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    ==8246== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 8 from 1)
    ==8246== malloc/free: in use at exit: 48 bytes in 4 blocks.
    ==8246== malloc/free: 14 allocs, 10 frees, 176 bytes allocated.
    ==8246== For counts of detected errors, rerun with: -v
    ==8246== searching for pointers to 4 not-freed blocks.
    ==8246== checked 167,776 bytes.
    ==8246== 
    ==8246== LEAK SUMMARY:
    ==8246==    definitely lost: 48 bytes in 4 blocks.
    ==8246==      possibly lost: 0 bytes in 0 blocks.
    ==8246==    still reachable: 0 bytes in 0 blocks.
    ==8246==         suppressed: 0 bytes in 0 blocks.
    ==8246== Rerun with --leak-check=full to see details of leaked memory.

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    780
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mai 2006
    Messages : 780
    Points : 1 176
    Points
    1 176
    Par défaut
    Rerun with --leak-check=full

    il faut que tu relances avec cette option pour avoir le détail

  3. #3
    Membre émérite
    Avatar de white_tentacle
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    1 505
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 1 505
    Points : 2 799
    Points
    2 799
    Par défaut
    En gros :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ==8246== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 8 from 1)
    Bon point : valgrind n'a détecté aucune erreur mémoire (débordement de tableau, pointeur null, etc)

    ==8246== malloc/free: in use at exit: 48 bytes in 4 blocks.
    Mauvais point : à la sortie du programme, il restait des blocs utilisés, totalisant 48 octets.

    ==8246== malloc/free: 14 allocs, 10 frees, 176 bytes allocated.
    Sur 14 allocations, seules 10 ont été libérées. Au total, tu as alloué 176 bytes.

    La suite est un résumé de tout ça

  4. #4
    Modérateur
    Avatar de bruno_pages
    Homme Profil pro
    ingénieur informaticien à la retraite
    Inscrit en
    Juin 2005
    Messages
    3 533
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : ingénieur informaticien à la retraite
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2005
    Messages : 3 533
    Points : 6 709
    Points
    6 709
    Par défaut
    mais valgrind détaille plus que cela, avec l'option --leak-check=full on sait de qu'elles classes il s'agit (si new) et la pile des appels ayant réaliser les allocations des blocks/instances perdus
    Bruno Pagès, auteur de Bouml (freeware), mes tutoriels sur DVP (vieux, non à jour )

    N'oubliez pas de consulter les FAQ UML et les cours et tutoriels UML

  5. #5
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 859
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 859
    Points : 218 580
    Points
    218 580
    Billets dans le blog
    120
    Par défaut
    Moi ce que j'adore avec valgrind, c'est qu'il dit quoi faire:

    Dans le log du départ
    [quote]
    ==8246== For counts of detected errors, rerun with: -v
    [quote]

    Après il va dire, faites un check complet:
    --leak-check=full

    Et puis faut pensé à compiler le programme avec l'option -g ( pour avoir les informations de debugguage ). Ça aide pas mal aussi
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  6. #6
    Membre du Club
    Inscrit en
    Février 2008
    Messages
    80
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 80
    Points : 43
    Points
    43
    Par défaut
    Merci beaucoup pour vos aides.

  7. #7
    Membre du Club
    Inscrit en
    Février 2008
    Messages
    80
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 80
    Points : 43
    Points
    43
    Par défaut
    J'ai exécuter avec l'option --leak-check=full et j'ai le résultat suivant (les parties en rouge sont celles que j'ai du mal à comprendre):
    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
    ==7232== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 8 from 1)
    ==7232== malloc/free: in use at exit: 48 bytes in 4 blocks.
    ==7232== malloc/free: 14 allocs, 10 frees, 176 bytes allocated.
    ==7232== For counts of detected errors, rerun with: -v
    ==7232== searching for pointers to 4 not-freed blocks.
    ==7232== checked 167,776 bytes.
    ==7232== 
    ==7232== 48 (8 direct, 40 indirect) bytes in 1 blocks are definitely lost in loss record 2 of 3
    ==7232==    at 0x4C25F6C: operator new(unsigned long) (vg_replace_malloc.c:230)
    ==7232==    by 0x400B91: main (in /home/awabi/Bureau/proj/projet)
    ==7232== 
    ==7232== LEAK SUMMARY:
    ==7232==    definitely lost: 8 bytes in 1 blocks.
    ==7232==    indirectly lost: 40 bytes in 3 blocks.
    ==7232==      possibly lost: 0 bytes in 0 blocks.
    ==7232==    still reachable: 0 bytes in 0 blocks.
    ==7232==         suppressed: 0 bytes in 0 blocks.
    Merci d'avance

  8. #8
    Modérateur
    Avatar de bruno_pages
    Homme Profil pro
    ingénieur informaticien à la retraite
    Inscrit en
    Juin 2005
    Messages
    3 533
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : ingénieur informaticien à la retraite
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2005
    Messages : 3 533
    Points : 6 709
    Points
    6 709
    Par défaut
    vous êtes sure d'avoir compilé avec l'option -g ? parce qu'il n'y a pas de numéro de ligne

    ==7232== at 0x4C25F6C: operator new(unsigned long) (vg_replace_malloc.c:230)
    ==7232== by 0x400B91: main (in /home/awabi/Bureau/proj/projet)
    la mémoire perdue est liée à un new (et non calloc ou autre) appelé dans main

    ==7232== definitely lost: 8 bytes in 1 blocks.
    ==7232== indirectly lost: 40 bytes in 3 blocks.
    ce qui n'est plus référencé c'est un bloc de 8 octets qui lui même référence directement ou indirectement 3 éléments occupant au total 40 octets
    Bruno Pagès, auteur de Bouml (freeware), mes tutoriels sur DVP (vieux, non à jour )

    N'oubliez pas de consulter les FAQ UML et les cours et tutoriels UML

  9. #9
    Membre du Club
    Inscrit en
    Février 2008
    Messages
    80
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 80
    Points : 43
    Points
    43
    Par défaut
    OK.
    Non je n'ai pas compilé avec l'option -g.
    Avec les pointeurs intelligents c'est dure de ne pas avoir de fuite mémoire. Je pense que je vais faire une fonction qui me permettra de détecter les fuites en utilisant les zones allouées.. Est ce une bonne idée?

  10. #10
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    780
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mai 2006
    Messages : 780
    Points : 1 176
    Points
    1 176
    Par défaut
    Citation Envoyé par awabi Voir le message
    OK.
    Non je n'ai pas compilé avec l'option -g.
    Avec les pointeurs intelligents c'est dure de ne pas avoir de fuite mémoire.
    avec les pointeurs intelligents (comme boost::shared_ptr), c'est surtout dur d'en avoir.

    Je pense que je vais faire une fonction qui me permettra de détecter les fuites en utilisant les zones allouées.. Est ce une bonne idée?
    bon sinon à savoir en C++ tu auras de la mémoire alloué dans la lib standard que valgrind prendra pour des fuites mais qui n'en est pas.

    Ben le meilleur conseil c'est de compiler comme on te dit, comme ça tu sauras où sont tes fuites, et si ce sont de vrais fuites.

    Mais sinon, il y a une methode simple: pour chaque new, un delete. ( ou un pointeur intelligent pour gérer les desallocs )

  11. #11
    Membre du Club
    Inscrit en
    Février 2008
    Messages
    80
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 80
    Points : 43
    Points
    43
    Par défaut
    Je suis entrain de faire ma propre classe de pointeur intelligent c'est pour cela que les désallocations ne sont pas très bien gérées.

  12. #12
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    780
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mai 2006
    Messages : 780
    Points : 1 176
    Points
    1 176
    Par défaut
    Citation Envoyé par awabi Voir le message
    Je suis entrain de faire ma propre classe de pointeur intelligent c'est pour cela que les désallocations ne sont pas très bien gérées.
    tu as quelque chose contre les shared_ptr ?

Discussions similaires

  1. Fuites mémoire avec valgrind sur un exemple simple
    Par Kazujoshi dans le forum GTK+ avec C & C++
    Réponses: 5
    Dernier message: 03/11/2010, 01h56
  2. 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
  3. Fuite mémoire avec valgrind
    Par franchouze dans le forum C++
    Réponses: 3
    Dernier message: 05/06/2006, 16h47
  4. [SWT]SWT et fuite mémoire(ou pas)
    Par menuge dans le forum SWT/JFace
    Réponses: 2
    Dernier message: 22/06/2004, 21h40
  5. [debug] fuites mémoires
    Par tmonjalo dans le forum C
    Réponses: 3
    Dernier message: 28/07/2003, 17h20

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