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 :

cout : imprimer un pointeur


Sujet :

C++

  1. #1
    Membre régulier
    Inscrit en
    Février 2009
    Messages
    141
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 141
    Points : 91
    Points
    91
    Par défaut cout : imprimer un pointeur
    Bonjour!

    J'ai une erreur et je ne sais pas d'où elle provient:

    J'ai une classe fille qui me retoure une map<string, float> de nom Valeurdsmap.

    Jusqu'ici, pas de problèmes.

    Dans la classe mère (Classmere), j'ai la méthode ci dessous :
    Cette methode est un get et je recopie ma map que je place en reference
    Jusque la toujours pas de pb.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    bool Error::get(map<string, float>*& retValeurdsmap)
    {
    	retValeurdsmap = this->Valeurdsmap;
    	return true;
    }
    Dans une autre classe j'ai une méthode qui me permet de récupérer la map de ma classe mère. Visiblement tout fonctionne mais qd je veux imprimer la taille de ma map pour voir si elle est bien remplie, le programme crash.

    Donc la ligne cout<<test->size(); pose problème;
    Je pense que je dois dereferencer pour renvoyer ce qu'il y a derriere le pointeur mais cela ne fonctionne pas non plus.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
     
    bool Local::Allocation(Classmere* myObject)
    {  
    	map<string, float>* test;
    	myObject->get(test);// pqs de probleme, 
    VS me donne  automatiquement la méthode.
    	test->size();
    	cout<<"test2"<<endl;
    	cout<<test->size();
     
    return true;
    }
    Merci de vos r2ponses

  2. #2
    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,
    Tout simplement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    //T*p
    std::cout<<p<<std::endl;

  3. #3
    Membre émérite
    Avatar de white_tentacle
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    1 505
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 1 505
    Points : 2 799
    Points
    2 799
    Par défaut
    Attention, tu ne recopies pas la map, tu fais juste pointer test dessus (dans get).

    Le code que tu montres me semble correct, donc je pense que ton pointeur est déjà corrompu dans ton objet Error.

    Quand tu appelles size(), ça plante. Si ça ne plante pas au premier, c'est je pense parce que le compilo vire la ligne inutile (compilation en release).

  4. #4
    Membre régulier
    Inscrit en
    Février 2009
    Messages
    141
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 141
    Points : 91
    Points
    91
    Par défaut
    Salut 3D Archi
    je ne sais pas si tu as lu mon post, ce n'est pas si simple.
    Je pense donc que le post était au bon endroit.
    I y a un pb de référencement ou de passage de la fonction.

  5. #5
    Membre régulier
    Inscrit en
    Février 2009
    Messages
    141
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 141
    Points : 91
    Points
    91
    Par défaut
    Salut white_tentacle,
    oui le problème est effectivement la, je pense que je recopie mal en fait dans mon get.
    Comment je peux faire? As tu une idee?
    Je compile effectivement en mode release, bien vu
    Je pense en fait qu'il faut que je fasse un classe abstraite.
    Merci

  6. #6
    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
    Vu l'intitulé, je pensais que tu voulais simplement sortir l'adresse.
    Vérifie que myObject est valide (!=NULL?).

  7. #7
    Membre régulier
    Inscrit en
    Février 2009
    Messages
    141
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 141
    Points : 91
    Points
    91
    Par défaut
    Oui, l'intitule du titre est mal trouve. Mes excuses.
    Je n'arrive tjs pas a recopier cette map même en faisant une classe abstraite. Si tu pouvais d'ailleurs remettre le post au bon endroit SVP.

  8. #8
    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
    Tu veux recopier la map ou récupérer le pointeur ?

  9. #9
    Membre régulier
    Inscrit en
    Février 2009
    Messages
    141
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 141
    Points : 91
    Points
    91
    Par défaut
    je veux recopier ma map, c'est ce que je fais ici.
    Comment as tu il acces a ma classe fille pour Valeurdsmap. Je pense qu'il faut que je lui transmette non?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    bool Error::get(map<string, float>*& retValeurdsmap)
    {
    	retValeurdsmap = this->Valeurdsmap;
    	return true;
    }

  10. #10
    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 julien25 Voir le message
    Comment as tu il acces a ma classe fille pour Valeurdsmap.



    Citation Envoyé par julien25 Voir le message
    je veux recopier ma map, c'est ce que je fais ici.
    Si tu veux recopier la map :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    bool Error::get(map<string, float>& retValeurdsmap)
    {
    	retValeurdsmap = this->Valeurdsmap;
    	return true;
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    bool Local::Allocation(Classmere* myObject)
    {  
    	map<string, float> test;
    	myObject->get(test);
    	test.size();
    	cout<<"test2"<<endl;
    	cout<<test.size();
     
    return true;
    }
    Pas besoin de passer par un pointeur.
    Mais ça ne va que décaler ton plantage car apparemment, tu récupérais bien l'adresse avant.

  11. #11
    Membre régulier
    Inscrit en
    Février 2009
    Messages
    141
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 141
    Points : 91
    Points
    91
    Par défaut
    Merci de vos réponses.
    En fait l'erreur provenait d'ailleurs. Vous ne pouviez pas la voir car je ne vous avais pas donner cette partie du code.

    en fait ma map était déclarer 2 fois. Une fois dans ma classe, ce c'est bien.
    Mais aussi une fois a l'intérieur même de la méthode qui me cree ma map.
    Ensuite, j'avais un problème de case mémoire. Je commence a toucher au point sensible de C++. En effet, j'avais mal declarer ma map. J'avais mis :
    this->ValeurdsMap= ValeurdsMap

    au lieu de


    this->CurrentSensorMeanOfFeeder = new map<string,float>();

    ++

  12. #12
    Membre régulier
    Inscrit en
    Février 2009
    Messages
    141
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 141
    Points : 91
    Points
    91
    Par défaut
    Pourrirez vous me donner votre point de vue entre un pointeur et une référence.
    Avec un exemple parlant si possible.

    Pour moi un pointeur est une adresse de case mémoire. Et une reference est un pointeur fixe mais ca ne me parle pas beaucoup.

  13. #13
    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 julien25 Voir le message
    Pourrirez vous me donner votre point de vue entre un pointeur et une référence.
    Avec un exemple parlant si possible.

    Pour moi un pointeur est une adresse de case mémoire. Et une reference est un pointeur fixe mais ca ne me parle pas beaucoup.
    FAQ : Les références

    En gros : si tu veux pouvoir changer la valeur du paramètre, utilises une référence. N'utilises un pointeur que si tu as une bonne raison de vouloir aller à une adresse... et l'usage te montrera que tu as rarement de bonne raison de le faire.

  14. #14
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 629
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 629
    Points : 30 692
    Points
    30 692
    Par défaut
    Salut,

    Une référence est un alias de la variable d'origine.

    Ce qui fait que toute modification apportée à une référence (non constante) sera répercutée sur la variable d'origine (éventuellement dans la fonction appelante).

    Un pointeur est une adresse mémoire, à laquelle nous espérons le plus souvent trouver quelque chose du type indiqué.

    Les pointeurs présentent de nombreuses difficultés, dont la plupart sont issues des techniques d'allocation dynamique de la mémoire.

    C'est la raison pour laquelle on conseille, comme l'a si bien dit 3DArchi, de restreindre l'usage des pointeurs aux (rares) cas où l'on n'a pas d'autres solutions:

    Nous pourrions presque dire "Utilisez les références quand vous pouvez, utilisez les pointeurs quand vous devez"

Discussions similaires

  1. Imprimer un pointeur (un adresse)
    Par coolas dans le forum Langage
    Réponses: 4
    Dernier message: 29/04/2008, 11h33
  2. [Imprimer]Erreur pointeur null
    Par philippe13 dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 04/09/2006, 21h44
  3. djgpp et pointeurs far -2
    Par elvivo dans le forum Autres éditeurs
    Réponses: 16
    Dernier message: 29/07/2002, 22h43
  4. djgpp et pointeurs far
    Par elvivo dans le forum C
    Réponses: 2
    Dernier message: 13/07/2002, 00h44
  5. Comment imprimer le contenu d'un TStringGrid
    Par scorpiwolf dans le forum C++Builder
    Réponses: 2
    Dernier message: 19/06/2002, 15h41

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