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 :

Trackeur de fuites mémoires


Sujet :

Autres éditeurs

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2006
    Messages
    507
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mai 2006
    Messages : 507
    Par défaut Trackeur de fuites mémoires
    Bonjour,

    Peut-etre qu'ici quelqu'un connaitrait un trackeur de fuites mémoires pour programme C sous Mac Os X ???

    Merci, et bonne journée à tous !

  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 Fabllot
    Peut-etre qu'ici quelqu'un connaitrait un trackeur de fuites mémoires pour programme C sous Mac Os X ???
    Pas sûr que ça fonctionne sous Mac OS X, mais les plus connus sont Valgrind, Purify, efence. Il y a aussi ma modeste contribution :

    http://emmanuel-delahaye.developpez.com/clib.htm
    Module SYSALLOC

    qui a l'avantage d'être 100% ANSI donc indépendante de la plateforme...

  3. #3
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2006
    Messages
    507
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mai 2006
    Messages : 507
    Par défaut
    D'après leurs docs Valgrind, Purify et efence ne sont pas prévus pour Mac Os X, je me suis donc retourné vers ta bibliothèque.

    (Au passage, les indications sur ton site sont très claires, et tout fonctionne bien très vite !)

    Dans mon programme en C, j'interface une bibliothèque en C++, et j'ai peur que les fuites mémoires viennent de là...
    Est-ce que ta bibliothèque peut alors fonctionner pour voir si mes structures C, utilisées dans ce fichier C++, et initialisées avec des "malloc", sont bien libérées (ce fichier est le seul du projet compiler avec g++) ?

    D'autres part, je manipule pas mal de chaîne de caractères, parfois ces chaînes de caractères sont initialisés automatiquement avec des malloc mais parfois ce sont des constantes (je sais c'est pas terrible) alors cela pose certains problèmes pour la libération de la mémoire... Y'a t-il un moyen "propre" de procéder ?

  4. #4
    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 Fabllot
    Dans mon programme en C, j'interface une bibliothèque en C++, et j'ai peur que les fuites mémoires viennent de là...
    C'est pas très clair. Le programme est en C et il appelle des fonctions C++ ou le contraire ?

    Mon code est prévu pour un programme compilé en C. Il ne traite pas les new/delete du C++. Cependant, son interface (sysalloc.h) est prévue pour fonctionner dans un environnement C++ (jamais testé) du moment que son implémentation (sysalloc.c) est compilée en C, on est bien d'accord ?
    Est-ce que ta bibliothèque peut alors fonctionner pour voir si mes structures C, utilisées dans ce fichier C++, et initialisées avec des "malloc", sont bien libérées (ce fichier est le seul du projet compiler avec g++) ?
    OK, oui. Mais ton code C devrait être indépendant du C++ et donc être testable séparément en tant qu'application C.
    D'autres part, je manipule pas mal de chaîne de caractères, parfois ces chaînes de caractères sont initialisés automatiquement avec des malloc mais parfois ce sont des constantes (je sais c'est pas terrible) alors cela pose certains problèmes pour la libération de la mémoire... Y'a t-il un moyen "propre" de procéder ?
    Oui.

    Déjà, libérer une chaine non allouée est un bug grave. (comportement indéterminé).

    Le plus simple est d'utiliser exclusivement l'allocation dynamique et la libération est systématique (remets à NULL après libération, ça évite les embrouilles)
    Si tu as une chaine constante, tu fais une copie dynamique avec la fonction POSIX.1 strdup(). Attention, elle échappe à la surveillance de SYSALLOC.
    Pour éviter ça, j'utilise ma fonction STR_dup() du module STR qui a l'avantage d'être portable (100% C-ANSI).

    N'hésite pas à poser des questions si nécessaire.

    Fait des essais sur des petits bouts de code pour t'entrainer à maitriser SYSALLOC.

    Pour les chaines, une alternative est d'apprendre à utiliser mon module FSTR (Flexible STRings). Si besoin est, je fais une doc (il y a déjà le test unitaire qui sert d'exemple... si on arrive à le comprendre).

  5. #5
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2006
    Messages
    507
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mai 2006
    Messages : 507
    Par défaut
    Citation Envoyé par Emmanuel Delahaye
    C'est pas très clair. Le programme est en C et il appelle des fonctions C++ ou le contraire ?
    Le programme principale est C, et appelle des fonctions écrites en C++ ayant des signatures C.

    Citation Envoyé par Emmanuel Delahaye
    Si tu as une chaine constante, tu fais une copie dynamique avec la fonction POSIX.1 strdup(). Attention, elle échappe à la surveillance de SYSALLOC.
    Pour éviter ça, j'utilise ma fonction STR_dup() du module STR qui a l'avantage d'être portable (100% C-ANSI).

    N'hésite pas à poser des questions si nécessaire.

    Fait des essais sur des petits bouts de code pour t'entrainer à maitriser SYSALLOC.

    Pour les chaines, une alternative est d'apprendre à utiliser mon module FSTR (Flexible STRings). Si besoin est, je fais une doc (il y a déjà le test unitaire qui sert d'exemple... si on arrive à le comprendre).
    Je te remercie pour ces conseils. Cependant, je ne vais utiliser tes bibliothèques que pour tester les miennes... Il pourrait y avoir quelques problèmes de licences et de droits d'auteurs sinon...

  6. #6
    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 Fabllot
    Le programme principale est C, et appelle des fonctions écrites en C++ ayant des signatures C.
    On va considérer que c'est du C. Les fonctions de cette bibliothèque sont, bien sûr, validées et ne créent pas de fuite mémoire quand elles sont bien utilisées, on est d'accord ?
    Je te remercie pour ces conseils. Cependant, je ne vais utiliser tes bibliothèques que pour tester les miennes... Il pourrait y avoir quelques problèmes de licences et de droits d'auteurs sinon...
    Mon code est libre de droit. Je demande juste que le nom de l'auteur (ED) soit laissé. C'est pas trop méchant comme licence...

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

Discussions similaires

  1. [tomcat][memoire] java.net.URL et fuite mémoire
    Par Seiya dans le forum Tomcat et TomEE
    Réponses: 6
    Dernier message: 09/03/2009, 10h41
  2. [Fuites mémoire] Je cherche un utilitaire
    Par 10_GOTO_10 dans le forum C++Builder
    Réponses: 8
    Dernier message: 10/02/2005, 10h03
  3. Outil de recherche de fuite mémoire
    Par eag35 dans le forum MFC
    Réponses: 4
    Dernier message: 02/02/2005, 12h46
  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