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 :

Vector de structure contenant des string


Sujet :

C++

  1. #1
    Membre confirmé
    Avatar de Nicolas Bauland
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    119
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 119
    Points : 563
    Points
    563
    Par défaut Vector de structure contenant des string
    J'ai crée une structure qui contient des std::string pour stocker quelques chaines.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    struct MaStruct {
        std::string String1;
    };
    Dans mon programme j'utilise un vector de cette structure:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    std::vector<MaStruct> list;
    Lorsque mon programme se termine il détecte des fuites de mémoires. Les string étant des objets ne devraient-elles pas se détruire toutes seules ? De même pour le vector ?

    Merci de vos lumières.

  2. #2
    Rédacteur

    Avatar de Davidbrcz
    Homme Profil pro
    Ing Supaéro - Doctorant ONERA
    Inscrit en
    Juin 2006
    Messages
    2 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ing Supaéro - Doctorant ONERA

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 307
    Points : 4 732
    Points
    4 732
    Par défaut
    Lorsque mon programme se termine il détecte des fuites de mémoires
    Qui est 'il' ? Est-ce ton programme ? Il faudra que tu m'expliques comment il fait pour détecter ses propres fuites de mémoire, je veux bien la recette :p
    "Never use brute force in fighting an exponential." (Andrei Alexandrescu)

    Mes articles dont Conseils divers sur le C++
    Une très bonne doc sur le C++ (en) Why linux is better (fr)

  3. #3
    Membre confirmé
    Avatar de Nicolas Bauland
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    119
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 119
    Points : 563
    Points
    563
    Par défaut
    Citation Envoyé par Davidbrcz Voir le message
    Qui est il ? Ton programme ? Il faudra que tu m'expliques comment il fait pour détecter ses propres fuites de mémoire.
    Pardon, je me suis en effet mal exprimé: c'est l'IDE (Visual Studio 2008) qui me détecte des fuites de mémoire à la sortie du programme.

  4. #4
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Salut,
    Il est peu probable que ta fuite mémoire vienne des string ou des std::vector sauf à avoir un implémentation exotique de la STL qui aurait des bugs. Mais si tu utilises des compilateurs habituels (gcc, visual, icc, etc.), ce cas est vraiment peu probable.
    Les premières choses à vérifier sont tes propres allocations ou celles de bibliothèques tierces moins répandues et donc susceptibles d'avoir des bugs.
    La question un peu maladroite de David est intéressante : comment sais-tu que tu as des fuites mémoires ? Peut-être est-ce le diagnostique qui est trop hâtif ?

  5. #5
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Citation Envoyé par Nicolas Bauland Voir le message
    Pardon, je me suis en effet mal exprimé: c'est l'IDE (Visual Studio 2008) qui me détecte des fuites de mémoire à la sortie du programme.
    Tu as des MFC ?

  6. #6
    Membre confirmé
    Avatar de Nicolas Bauland
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    119
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 119
    Points : 563
    Points
    563
    Par défaut
    Citation Envoyé par 3DArchi Voir le message
    Salut,
    Il est peu probable que ta fuite mémoire vienne des string ou des std::vector sauf à avoir un implémentation exotique de la STL qui aurait des bugs. Mais si tu utilises des compilateurs habituels (gcc, visual, icc, etc.), ce cas est vraiment peu probable.
    Donc, on est bien d'accord qu'à priori, cela ne vient ni des string ni des vector (surtout que pour l'instant je n'ai pas de new dans mon programme).

    La question un peu maladroite de David est intéressante : comment sais-tu que tu as des fuites mémoires ? Peut-être est-ce le diagnostique qui est trop hâtif ?
    Lorsque j'execute mon programme dans l'IDE, il m'indique une fuite memoire à la sortie de celui-ci. Ce qui est étrange, et ce pourquoi j'ai posé la question, est que la mémoire perdue semble contenir des chaines de caractéres contenue dans les string.

    Comme j'utilise des variables globales, peut-etre le diagnostique se fait-il avant la libération de celle ci ?

  7. #7
    Membre confirmé
    Avatar de Nicolas Bauland
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    119
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 119
    Points : 563
    Points
    563
    Par défaut
    Citation Envoyé par 3DArchi Voir le message
    Tu as des MFC ?
    En fait je travaille avec une dll win32 (là où réside mon vecto de string) dans un programme MFC (Boite de dialogue toute bete).

  8. #8
    Rédacteur

    Avatar de Davidbrcz
    Homme Profil pro
    Ing Supaéro - Doctorant ONERA
    Inscrit en
    Juin 2006
    Messages
    2 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ing Supaéro - Doctorant ONERA

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 307
    Points : 4 732
    Points
    4 732
    Par défaut
    Aurais tu moyen de passer ton programme par un coup de purify (ou un autre équivalent) pour tester s'il y a vraiment fuite de mémoire ?
    Car si tu utilise le RAII (tes classes sont RAII-sante ou utilise des objets respectant le RAII) , je ne vois pas comment tu pourrais avoir des fuites de mémoire.
    "Never use brute force in fighting an exponential." (Andrei Alexandrescu)

    Mes articles dont Conseils divers sur le C++
    Une très bonne doc sur le C++ (en) Why linux is better (fr)

  9. #9
    Membre expert
    Avatar de Klaim
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Août 2004
    Messages
    1 717
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 1 717
    Points : 3 344
    Points
    3 344
    Par défaut
    Si tu utilises des bibliothèques, assures toi qu'il n'y en a pas une qui ne désalloue pas des données "de base" parcequ'elle part du principe qu'une fois initializée elle ne peut être détruite qu'a la fin du programme, alors autant "laisser faire l'OS"...

    J'ai vu ça plusieurs fois, mais heureusement il y a toujours eu des patchs pour corriger de tels bibliothèques pour permettre de quitter l'application de manière propre.

  10. #10
    Membre confirmé
    Avatar de Nicolas Bauland
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    119
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 119
    Points : 563
    Points
    563
    Par défaut
    En fait le problème venait du fait que mon programme "boite de dialogue" se terminait, et donc faisait le diagnostique de la memoire, avant que la dll soit dechargée.

    Du coup toutes les variables de la dll ne semblait pas desalouees. Je pense qu'elles devaient l'etre mais je n'en suis pas certain et je n'aime pas voir des messages d'erreur memoire dans l'IDE. (Peut etre que j'aurais pu passer outre, mais je ne trouve pas ca propre ni rassurant).

    J'ai donc revu l'utilisation de la dll (c'est l'avantage quand on fait tout !) et le probleme semble resolu.

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

Discussions similaires

  1. ArrayList contenant des String[]
    Par disciplined dans le forum C#
    Réponses: 6
    Dernier message: 28/02/2010, 20h45
  2. Lecture/affichage d'un fichier contenant des string
    Par Khaoula.85 dans le forum Visual C++
    Réponses: 4
    Dernier message: 02/12/2009, 11h13
  3. Réponses: 10
    Dernier message: 10/10/2009, 18h39
  4. Dupliquer une structure contenant des mutables
    Par bumbolol dans le forum Caml
    Réponses: 6
    Dernier message: 28/01/2009, 21h37
  5. Problème avec un switch contenant des strings
    Par dessinateurttuyen dans le forum Langage
    Réponses: 6
    Dernier message: 18/07/2006, 12h56

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