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

Autres éditeurs Discussion :

Memory leak en C/C++


Sujet :

Autres éditeurs

  1. #1
    Futur Membre du Club
    Inscrit en
    Juillet 2004
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 8
    Points : 8
    Points
    8
    Par défaut Memory leak en C/C++
    Bonjour,

    Voici mon problème, je maintiens une application en C/C++ et j'aurais peut-être des problèmes de gestion mémoire.

    C'est la toute première fois que je traque ce type d'erreur et je ne sais pas exactement comment faire cela.

    Mon applicatif tourne sur VMS Alpha, et comprend un mixte de C et C++ => je dois pouvoir traquer les problèmes dans les new, malloc ....

    En regardant sur le net, j'ai trouvé les sources de Fortify. J'ai essayé de les inclure dans mon applicatif, mais depuis il ne tourne plus (des caractères inconnus se sont gréffés à mes varibles dans le programme (du style :§§ et ¥¥¥) et j'ai un dump au sein du programme.

    Est-ce normal?
    Connaissez vous d'autres sources que Fortify permettant de vérifier le C et le C++?

    Merci bien

  2. #2
    Membre habitué

    Femme Profil pro
    Développeur informatique
    Inscrit en
    Février 2004
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 59
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2004
    Messages : 58
    Points : 166
    Points
    166
    Par défaut
    J'utilise Valgrind pour faire ce genre de chose.
    Il y a aussi ElectricFence je crois, mais je ne l'ai jamais utilisé.
    Purify est très bien aussi, mais payant.

  3. #3
    Futur Membre du Club
    Inscrit en
    Juillet 2004
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 8
    Points : 8
    Points
    8
    Par défaut
    Je vais regarder ce que je peux trouver sur Valgrind sur le net et essayer avec.

    J'avais aussi vu purify mais j'ai eu qu'un seul mot d'ordre dans cette recherche: trouver des sources libres et non payante.

    Merci

  4. #4
    Futur Membre du Club
    Inscrit en
    Juillet 2004
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 8
    Points : 8
    Points
    8
    Par défaut
    Ce que j'ai oublié de stipuler, c'est que j'emploie dans ces sources du PRO-C et dans ce PRO-C, je gére nottamment des CLOB.

    J'ai constaté que le comportement étrange de Fortify (rajout des caractères bizarres) se déroulait sur les variables SQL de mon programme.

  5. #5
    Membre actif
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    258
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 258
    Points : 288
    Points
    288
    Par défaut Re: Memory leak en C/C++
    Citation Envoyé par Roswell
    et comprend un mixte de C et C++ => je dois pouvoir traquer les problèmes dans les new, malloc ....
    Je sais que c'est un code que tu maintiens mais ce mélange est le pire qu'il puisse être fait ! Toutes les conditions sont réunies pour des gros memory leak, très durs à débugger. C'est vraiment une horreur de mélanger du C et du C++ qui sont 2 languages complètement différent.

    Maintenant moi aussi j'utilise Valgrind, mais pour chasser les memory leak il y a une solution simple :

    Pour chaque :
    malloc() doit correspondre un free() sur le même pointeur
    new doit correspondre un delete sur le même pointeur/objet
    new[] doit correspondre un delete[] sur le même pointeur/objet

    Si tu respectes cette règle élémentaire de base il ne devrais pas y avoir de probème. Il est a noté aussi qu'une très bonne habitude à prendre en programmation est de mettre le pointeur à NULL après sa libération :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    char * p_str = malloc( 128 * sizeof(char));
    /* ... */
    if(p_str)
    {
          free(p_str); p_str = NULL;
    }
    Pareil avec new et delete. Ce système permet de ne jamais libérer 2 fois le même pointeur ce qui est la cause de beaucoup de "segmentation fault".

  6. #6
    Futur Membre du Club
    Inscrit en
    Juillet 2004
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 8
    Points : 8
    Points
    8
    Par défaut
    Et oui, je sais. Le mélange de code C et C++ (avec du PRO-C en prime) n'est pas l'idéal mais malheureusement je peux pas refaire le passé.

  7. #7
    Futur Membre du Club
    Inscrit en
    Juillet 2004
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 8
    Points : 8
    Points
    8
    Par défaut
    Et voilà j'ai opté pour fortify (déjà utilisé dans la maison donc ils sont plus confiant concernant ces sources )
    Par contre j'ai toujours un problème avec le résultat de mes PRO-C (mes select me ramène n'importe quoi) mais bon j'ai pu trouver les problèmes mémoire.

    Merci pour vos réponses

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

Discussions similaires

  1. [debug] memory leak
    Par r0d dans le forum MFC
    Réponses: 8
    Dernier message: 13/01/2006, 10h46
  2. Compilation TAO / Mfc : Memory Leaks
    Par Rolsct dans le forum CORBA
    Réponses: 4
    Dernier message: 17/04/2005, 19h13
  3. [MFC] Thread & memory leaks
    Par Racailloux dans le forum MFC
    Réponses: 7
    Dernier message: 15/03/2005, 12h44
  4. [MFC] A la chasse au memory leak
    Par Yabo dans le forum MFC
    Réponses: 17
    Dernier message: 27/06/2004, 17h35
  5. Réponses: 7
    Dernier message: 26/02/2004, 09h32

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