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

SL & STL C++ Discussion :

Fuite mémoire de la classe string


Sujet :

SL & STL C++

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

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Fuite mémoire de la classe string
    Bonjour,

    j'ai une fuite mémoire (960bytes) dans le programme suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    #include <stdlib.h>
    #include <string>
     
    using namespace std;
     
    int
    main(int argc, char *argv[]) {
      string s("hello world");
      cout << s << endl;
      return EXIT_SUCCESS;
    }
    Cela viendrait de la déclaration du string. Je ne comprends pas pourquoi. Si quelqu'un avait une explication je lui en serais très reconnaissant.
    Merci de votre aide,

    cordialement,

    Jean


    [Balises CODE rajoutées par Loulou24, merci d'y penser à l'avenir]

  2. #2
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Points : 16 213
    Points
    16 213
    Par défaut
    http://groups.google.fr/group/fr.comp.lang.c++/msg/4d6085d55caaace5?hl=fr&

    Ca pourrait faire une FAQ, après un peu de remise en forme, non ?

  3. #3
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 753
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 753
    Points : 10 704
    Points
    10 704
    Billets dans le blog
    3
    Par défaut
    c'est noté

  4. #4
    Modérateur
    Avatar de bruno_pages
    Homme Profil pro
    ingénieur informaticien à la retraite
    Inscrit en
    Juin 2005
    Messages
    3 534
    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 534
    Points : 6 723
    Points
    6 723
    Par défaut Re: Fuite mémoire de la classe string
    Citation Envoyé par jean_barac
    j'ai une fuite mémoire (960bytes) dans le programme suivant
    tu es vraiment certain d'avoir une fuite mémoire ?, ce n'est pas parce que la gestion des string a pris de la mémoire qu'elle est vraiment perdue, dés la prochaine allocation d'une string elle sera re-utilisée. On voit bien que 960 octets n'a aucun rapport avec ton "hello world", string c'est pris un buffer de travail.

  5. #5
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut Re: Fuite mémoire de la classe string
    Citation Envoyé par bruno_pages
    Citation Envoyé par jean_barac
    j'ai une fuite mémoire (960bytes) dans le programme suivant
    tu es vraiment certain d'avoir une fuite mémoire ?, ce n'est pas parce que la gestion des string a pris de la mémoire qu'elle est vraiment perdue, dés la prochaine allocation d'une string elle sera re-utilisée. On voit bien que 960 octets n'a aucun rapport avec ton "hello world", string c'est pris un buffer de travail.
    C'est bien ce qui est expliqué dans le lien donné par Loïc.

  6. #6
    Modérateur
    Avatar de bruno_pages
    Homme Profil pro
    ingénieur informaticien à la retraite
    Inscrit en
    Juin 2005
    Messages
    3 534
    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 534
    Points : 6 723
    Points
    6 723
    Par défaut Re: Fuite mémoire de la classe string
    Citation Envoyé par Loulou24
    C'est bien ce qui est expliqué dans le lien donné par Loïc.
    désolé, j'y étais allé voir, mais il y avait trop de choses à lire, et moi qui 'râle' parce que les gens ne lisent pas la doc de bouml ...

  7. #7
    Inactif  

    Homme Profil pro
    Ingénieur test de performance
    Inscrit en
    Décembre 2003
    Messages
    1 986
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur test de performance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 986
    Points : 2 605
    Points
    2 605
    Par défaut Re: Fuite mémoire de la classe string
    J'utilise pas mal les conteneurs de la STL et j'avais le même genre de problème lorsque je détectais les fuites de mémoire.

    En fait l'explication est simple. "main" est une fonction comme les autres (enfin presque). Dans cette fonction tu déclares une classe string. Bah en fait ta classe string et les allocations mémoires qu'elle a faites ne seront libérées uniquement lorsque tu sortiras de la fonction "main". C'est le comportement normal (empilage-dépilage -> appel du destructeur).

    Je suis à peu près sur que ton outil de détection de fuite ne fonctionne qu'à l'intérieur du "main". Donc tout ce qui se passe au niveau de l'accolade fermante du "main", et bien il ne le sait pas. Et c'est bien dommage parce que c'est là que les pseudo-fuites que tu as détectées sont libérées.

    un moyen de t'en convaincre, libéres toi-même les allocations de la string avant la fin du "main" et lances ton détecteur de fuite à ce moment-là:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    #include <stdlib.h>
    #include <string>
     
    using namespace std;
     
    int
    main(int argc, char *argv[]) {
      string s("hello world");
      cout << s << endl;
      s.clear();
      return EXIT_SUCCESS;
    }
    Tu verras que la STL n'est pas buggée. Pas sur un code aussi simple quand-même.

  8. #8
    Membre actif
    Profil pro
    Inscrit en
    Août 2003
    Messages
    247
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 247
    Points : 276
    Points
    276
    Par défaut Re: Fuite mémoire de la classe string
    Citation Envoyé par moldavi
    Tu verras que la STL n'est pas buggée. Pas sur un code aussi simple quand-même.
    On ne peut malheureusement pas dire ça de toute les STL... Suivez mon regard... Troll mis à part, il peut réellement avoir des bugs dans certaines implémentation de la STL, même dans des codes aussi simples. Ce n'est bien sûr pas par là qu'il faut commencer à chercher la causes des disfonctionnement, mais il ne faut pas non plus tomber dans l'excès inverse : toute les STL ne sont pas infaillibles.

Discussions similaires

  1. Fuite mémoire sur une classe template.
    Par robinsondesbois dans le forum Langage
    Réponses: 17
    Dernier message: 11/07/2013, 16h38
  2. Fuites mémoire dans une classe "java.util.HashMap$Entry"
    Par ladyingold dans le forum Collection et Stream
    Réponses: 19
    Dernier message: 10/02/2012, 15h51
  3. [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
  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