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 :

Detected memory leaks


Sujet :

C++

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    77
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2015
    Messages : 77
    Points : 46
    Points
    46
    Par défaut Detected memory leaks
    Bonjour,

    Dans un programme, j'ai un petit soucis. Il plantait, non pas à la compilation, mais à l'execution quand j'appuyais sur un bouton (c'est su Visual C++). Je me suis rendu compte que tout ca à cause d'une variable qui s'amuse à changer de valeur comme bon lui semble. Et j'ai ensuite decouvert dans l'output Debug de VS 2010 :

    Detected memory leaks!
    Dumping objects ->
    f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\strcore.cpp(156) : {829} normal block at 0x057004C8, 40 bytes long.
    Data: < S > B4 A6 B5 53 17 00 00 00 17 00 00 00 01 00 00 00
    c:\sources\liberrormsg.cpp(263) : {827} normal block at 0x0075C088, 12 bytes long.
    Data: < p S> 00 00 00 00 D8 04 70 05 C8 A6 B5 53
    Object dump complete.


    Si j'ai bien compris, j'ai une fuite memoire. Est ce la cause du faite que ma variable change de valeur comme ca ? Ou c'est completement different ?
    Et dans tous les cas, comment y remedier ?

    Merci

  2. #2
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 189
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 189
    Points : 17 141
    Points
    17 141
    Par défaut
    En général, c'est lié à un pointeur mal géré (les pointeurs nus, c'est le mal), ou surtout à un débordement de tableau.

    Dans le cas du tableau, passer par vector et surtout sa fonction at() plutot que [] permet de ne pas accéder en dehors de la mémoire.
    Par ailleurs, il faut toujours veiller à ce que les variables soient initialisées avant d'être lues.

    Je t'invite à activer un maximum de warning de compilation: dans visual, c'est /W4 dans les propriétés du projet.
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

  3. #3
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    77
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2015
    Messages : 77
    Points : 46
    Points
    46
    Par défaut
    Même en activant /W4, il n'y a pratiquement aucun warning (juste 3, 4 mais c'est rien). Il y a pas un moyen de voir toutes les variables declarées/utilisées/... lors de l'execution avec Visual Studio ? Car il y a enormement de fichier et j'en ai pour 1 semaine pour verifier chaques variables , surtout que c'est pas moi qui ai codé ce logiciel..

  4. #4
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 189
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 189
    Points : 17 141
    Points
    17 141
    Par défaut
    utiliser un débugger, et surtout DrMemory / Valgrind (deux programmes de vérification de la mémoire). Cela dit, je ne connais pas ces derniers.
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

  5. #5
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    77
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2015
    Messages : 77
    Points : 46
    Points
    46
    Par défaut
    Est ce que par hasard cela peut venir d'un dépassement de lecture dans un fichier (si on continue a essayer de lire alors qu'il n'y a plus rien) ?
    Car j'ai trouvé une boucle plutôt louche qui lit dans un fichier

  6. #6
    Membre expert
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    1 415
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 1 415
    Points : 3 156
    Points
    3 156
    Par défaut
    Je conseilles également un bon petit coup de DrMemory,il va te donner plein d'infos sur ce qui cloche et t'orienter vers la partie du code qui pose problème. Valgrind est super mais ne fonctionne pas sous windows.
    Find me on github

  7. #7
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    77
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2015
    Messages : 77
    Points : 46
    Points
    46
    Par défaut
    Je viens d'utiliser Dr Memory mais je sais pas trop comment interpreter les résultats . Je poste le "FINAL RESULT" :

    FINAL SUMMARY:

    DUPLICATE ERROR COUNTS:

    SUPPRESSIONS USED:

    ERRORS FOUND:
    0 unique, 0 total unaddressable access(es)
    1 unique, 1 total uninitialized access(es)
    3 unique, 3 total invalid heap argument(s)
    0 unique, 0 total GDI usage error(s)
    0 unique, 0 total handle leak(s)
    0 unique, 0 total warning(s)
    0 unique, 0 total, 0 byte(s) of leak(s)
    0 unique, 0 total, 0 byte(s) of possible leak(s)
    ERRORS IGNORED:
    309 potential error(s) (suspected false positives)
    (details: C:\XX\AppData\Roaming\Dr. Memory\DrMemory-RiffEdit.exe.4868.000\potential_errors.txt)
    680 potential leak(s) (suspected false positives)
    (details: C:\XX\AppData\Roaming\Dr. Memory\DrMemory-RiffEdit.exe.4868.000\potential_errors.txt)
    3 unique, 3 total, 316 byte(s) of still-reachable allocation(s)
    (re-run with "-show_reachable" for details)
    Details: C:\XX\AppData\Roaming\Dr. Memory\DrMemory-RiffEdit.exe.4868.000\results.txt


    Voilà. Au vu du nombre de potential error, je me doute qu'il y a des choses à regler, mais bon... Je peux poster le fichier potential_errors.txt mais il est vraiment vraiment long

  8. #8
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 189
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 189
    Points : 17 141
    Points
    17 141
    Par défaut
    Ce sont surtout les vraies erreurs qu'il faut corriger. Tout particulièrement la "1 unique, 1 total uninitialized access(es)".

    Il y a toutes les chances que ce soit le pointeur en cause.
    Quand aux "3 unique, 3 total invalid heap argument(s)", je ne sais pas ce que c'est.

    Cela dit, je n'ai jamais utilisé DrMemory, je ne peux pas t'en dire plus.
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

  9. #9
    Membre expert
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    1 415
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 1 415
    Points : 3 156
    Points
    3 156
    Par défaut
    Ne te préoccupe pas des potentials en effet, pas pour le moment. Regarde dans le reste du fichier, tu devrais avoir des callstacks qui te montrent dans quel fichier et à quel ligne le problème est rencontré. Si tu n'as pas ces infos, vérifie que tu es bien en debug.
    Find me on github

  10. #10
    Membre régulier
    Homme Profil pro
    Thésard
    Inscrit en
    Mars 2013
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Thésard
    Secteur : Santé

    Informations forums :
    Inscription : Mars 2013
    Messages : 54
    Points : 78
    Points
    78
    Par défaut
    Bonjour,

    Tu as pu corriger ton erreur ?
    Autrement tu pourrais nous en dire plus sur ton programme ? J'ai eu une erreur similaire il y a peu de temps, j'avais simplement oublié de supprimer un pointeur déclaré dans une méthode d'une de mes classes... A chaque appel de ma méthode on s'approchait un peu plus du précipice.

    Ça vaut ce que ça vaut, mais ça pourrait être une éventualité.

  11. #11
    Membre expérimenté
    Homme Profil pro
    Développeur C++
    Inscrit en
    Avril 2012
    Messages
    771
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur C++
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2012
    Messages : 771
    Points : 1 631
    Points
    1 631
    Par défaut
    Bonsoir,

    un outil assez sympa a utiliser pour l'analyse dynamique, Visual Leak detector. Tous simple inclure vld.h dans le main, exécuter son programme et visual leak detector générera un rapport à la fin de l'exécution.
    une réponse vous a permis d'avancer ?

Discussions similaires

  1. Detected memory leaks ?
    Par Kermichou dans le forum Bibliothèques
    Réponses: 1
    Dernier message: 17/01/2011, 17h29
  2. Detecter les memory leak sur Borland C++
    Par Bouillou dans le forum C++Builder
    Réponses: 5
    Dernier message: 15/03/2008, 05h20
  3. Detected Memory leaks
    Par alen dans le forum MFC
    Réponses: 7
    Dernier message: 31/01/2007, 21h06
  4. [memory leak detection]
    Par Patriarch24 dans le forum Windows
    Réponses: 3
    Dernier message: 07/09/2006, 17h57
  5. Detected memory leaks!
    Par Cirdan Telemnar dans le forum MFC
    Réponses: 27
    Dernier message: 16/06/2006, 10h04

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