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 :

Probl�me d'allocator


Sujet :

C++

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    3
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 3
    Par d�faut [Resolu]Probl�me d'allocator
    voila, je me pr�sente, je suis nouveau, je programe en C++ depuis 3 semaines, avant j'avais seulement apris le java en cour.
    mon probl�me est le suivant (je l'ai compl�tement identifier, �a simplifira �a compr�hention et la solution pour m'aider ^^) :

    pour arriv� directement � l'essentiel j'ai :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    typedef list<Gene*> structAdn;
    class Chromosome{
    ...
    structAdn adn;
    ...
    }
    typedef list<Chromosome> chromolist;
    typedef map<string,Gene*> reference;
    class Genotype
    {
    ...
    reference * pointeurPere;
    reference * pointeurMere;
    chromolist genomPere;
    chromolist genomMere;
    ...
    }
    l� o� le probl�me ce pose c'est que les "pointeurPere" et "...Mere" me serve � localis� un Gene* dans un Chromosome pour ensuite faire pointer des objet dessu (d'autre Gene qui ont pour particularit� d'avoir en interne un autre Gene*).
    Lors de l'appel du constructeur de Genotype de fait les map reference qui lie les nom des Gene avec un pointeur sur eux, pour les retrouver plus rappidement quand je cr�� plus tard les Gene qui utiliseront ces pointeurs.

    La o� mon probl�me ce pose : les allocator par d�faut de la STL qui von avec le map, me pause un probl�me, j'aimerai bien d�truire les map de reference entre String et Gene*, le probl�me qui se pause, si je fait un

    delete pointeurPere;

    cela se traduit par un appel de la destruction du map, qui poss�de un allocator par d�faut qui lui lance un

    delete Gene;

    de tout les �l�ment du map, or, les g�nes sont toujours utilis�, et du cou �a me bousille ma structure de donn�, et si je fait l'appel du destructeur de map dans le ~Genotype(), je me retrouve devant le nouveau probl�me que ce cou si, les Gene du map n'existe plus et les pointeur du map pointe sur une zone de m�moire quelconque, et j'ai un gentil seg fault.

    la solution que je cherche : comment modifier l'allocator d'un map pour lui dir de ne rien faire, ou de seulement g�r� les string, parceque sinon j'ai une tr�s l�g�re fuite de m�moire puisque je ne peut pas delete les pointeur de map<string,Gene*>

    j'ai la r�putation d'�tre extr�ment peut claire, et toujours particuli�rement compliquer, donc pour mon premier poste est ce que je doit r�expliquer un truc pas claire ?

  2. #2
    Expert confirm�
    Avatar de Luc Hermitte
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Ao�t 2003
    Messages
    5 296
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyr�n�es)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : A�ronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Ao�t 2003
    Messages : 5 296
    Par d�faut
    Tu n'as pas besoin de toucher � l'allocateur.
    La map ne d�truira jamais rien, de point�, pour toi.
    C'est � toi de r�aliser la destruction � l'endroit qui va bien.

    (Attention au destructeur de Chromosome qui d�truirait les gene de la liste, si tu n'as pas explicit� les op�rations de recopie.)
    Un pointeur sur une map me parait super moyen, et la porte ouverte aux probl�mes. D'ailleurs c'est quoi cette histoire de cr�er une map dans le constructeur. Quelle map, ou est-elle ?

    Typiquement, un bon diagramme mettant en �vidance qui est responsable de qui serait un bon d�but.
    Sinon, un ECM sera le bienvenu -- j'ai envie de te dire de te concentrer sur tes constructions, destructions et aussi tes copies.
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne r�ponds � aucune question technique par le biais de ce m�dia. Et de toutes fa�ons, ma BAL sur dvpz est pleine...

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    3
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 3
    Par d�faut
    donc tu dit que les container de la STL ne g�re par les allocation des pointeur, lorsque leur �l�ment sont des pointeurs ... donc si j'ai une list<Gene*> je doit, dans le destructeur lui m�me faire un (pour simplifier) while(iterator!=list.end()){ delete (*iterator); } ?
    parceque bon, de ce que j'ai lu, ce genre d'op�ration invalide mon iterator d�s la premi�re suppression puisque ma list change de forme � ce moment l� ... donc je remet pas en doute ce que tu dit, si tu en est sur, mais je voi absolument pas comment "nettoyer" un container de pointeur en appelant un delete sur chaque �l�ment ...

  4. #4
    Expert confirm�
    Avatar de Luc Hermitte
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Ao�t 2003
    Messages
    5 296
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyr�n�es)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : A�ronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Ao�t 2003
    Messages : 5 296
    Par d�faut
    Non. C'est std::cont::erase() qui invalide tous les iterateurs uniquement dans le cas de certains containers comme p.ex. les vecteurs. Les containeurs o� chaque it�rateur pointe sur un noeud diff�rent ne sont pas touch�s (list, set, map). L'it�rateur pass� en param�tre � erase() �tant bien invalid� pour tous les conteneurs.
    "delete *it;" lib�re et d�truit l'objet point� par le pointeur r�f�renc� par l'it�rateur. Il y a deux indrections avant d'ariver � l'objet (au sens OO).
    Je te laisse te reporter � la FAQ.

    Sinon, une des solutions "simple" est d'avoir un containeur de pointeurs intelligents � comptage de r�f�rences (comme p.ex. boost::shared_ptr<>)
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne r�ponds � aucune question technique par le biais de ce m�dia. Et de toutes fa�ons, ma BAL sur dvpz est pleine...

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    3
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 3
    Par d�faut
    oka, bas je vais commancer par correctement d�truire tout mes conteneur � leur fin de vie, et je verrai ensuite si j'ai toujours le prob ^^
    vu que je vais en avoir pour un certain temps de coder tout les destructeurs, je pense que le probl�me sera r�gl�, merci

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. Probl�me d'allocation m�moire
    Par araya dans le forum C
    R�ponses: 2
    Dernier message: 04/05/2006, 20h03
  2. Probl�me d'allocation m�moire
    Par cali1983 dans le forum C++
    R�ponses: 10
    Dernier message: 10/03/2006, 23h23
  3. Probl�me d'allocation de m�moire dans la pile
    Par prophet666 dans le forum x86 32-bits / 64-bits
    R�ponses: 6
    Dernier message: 19/01/2006, 02h22
  4. fenetre MDI - probl�me d'allocation
    Par say dans le forum C++Builder
    R�ponses: 8
    Dernier message: 03/11/2005, 17h06
  5. Question sur les probl�mes d'allocation dynamique
    Par slylafone dans le forum C++
    R�ponses: 23
    Dernier message: 25/10/2004, 14h18

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