Précédent   Forum du club des développeurs et IT Pro > C et C++ > C++ > Débuter
Débuter Forum d'entraide pour débuter en langage de programmation C++. Avant de poster : cours d'initiation au C++
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 09/01/2013, 11h39   #1
nbs1522
Invité de passage
 
Inscription : janvier 2013
Messages : 3
Détails du profil
Informations forums :
Inscription : janvier 2013
Messages : 3
Points : 0
Points : 0
Par défaut sauvegarder une adresse et la récupérer plus tard

Bonjour,
je débute en c++, j'ai besoin d'aide concernant les pointeurs et les adresses.

En fait j'ai une variable de type structure que je veux sauvegarder son adresse mémoire et pouvoir récupérer cette adresse pour afficher le contenu de la variable plut tard.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
	tree_node* saveroot; // poiteur sur une variable de type tree_node (structure)
 
	saveroot=(tree_node*)malloc(sizeof(tree_node)); // allocation mémoire de saveroot
 
	saveroot= &root; // récupérer l'adresse de root qui est une variable de type tree_node
 
       //recupérer les informations du root pointé par savroot
	std::cout<<"adresse root: "<<saveroot<<"\n\n";
	std::cout<<"contenu: \n Energy: "<<(*saveroot).energy<<"\n";
	std::cout<<" * indice: "<<(*saveroot).indiceTreeCoef[(*saveroot).scale]<<"\n";
	std::cout<<" * etat: "<<(*saveroot).hiddenState<<"\n";
	std::cout<<" * echelle: "<<(*saveroot).scale<<"\n\n";
j'ai sauvegarder l'adresse de root dans saveroot. mon problème, c'est que root change dans la suite du code, donc l'adresse change. ce que je souhaite c'est de sauvegarder le tout premier root et le récupérer par la suite. j'ai pensé à sauvegarder l'adresse récupérée dans une variable et la récupérer après mais le problème c'est que je connais pas le type de variable que je dois utiliser ( l'adresse est de cette forme 0x7fff73049aa0), quel type dois je mettre ?
nbs1522 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/01/2013, 12h28   #2
cob59
Membre chevronné
 
Inscription : décembre 2008
Messages : 490
Détails du profil
Informations forums :
Inscription : décembre 2008
Messages : 490
Points : 753
Points : 753
Tu es sûr d'être au point sur la distinction entre pointeur et objet pointé ?
Plutôt que tes 3 premières lignes (qui provoquent une fuite mémoire) tu devrais avoir quelque chose comme :
Code :
1
2
3
4
 
// Sauvegarde de l'état de root. Pour quoi faire d'ailleurs ?
tree_node saveroot;
save_root = root;
Bien sûr tree_node devrait pouvoir gérer les affection avec l'opérateur = :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
 
// Surcharge opérateur =
struct tree_node {
  ...
  tree_node& operator=(const tree_node& other) {
    energy = other.energy;
    scale = other.hiddenState;
    ... etc ...
 
    return *this;
  }
  ...
};
Et les 5 dernières lignes devraient être soit une méthode tree_node::afficher(), soit une fonction afficher(const tree_node* node);
cob59 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/01/2013, 14h23   #3
nbs1522
Invité de passage
 
Inscription : janvier 2013
Messages : 3
Détails du profil
Informations forums :
Inscription : janvier 2013
Messages : 3
Points : 0
Points : 0
Par défaut sauvegarde

Bonjour,

Tout d'abord, je vous remercie pour votre réponse.

en fait, root est une variable qui change dans la suite du code. ce que je veux faire c'est de sauvegarder l'adresse du premier root pour pouvoir récupérer ces informations (energie, echelle, ...), c'est pour ça je fais:

tree_node* saveroot;
saveroot= &root;
nbs1522 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/01/2013, 14h26   #4
nbs1522
Invité de passage
 
Inscription : janvier 2013
Messages : 3
Détails du profil
Informations forums :
Inscription : janvier 2013
Messages : 3
Points : 0
Points : 0
mais comme root change, j'ai remarqué que saveroot change aussi au fur et a mesure.

avez vous une solution ?
nbs1522 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/01/2013, 15h02   #5
Bousk
Modérateur
 
Homme Cyrille
Network programmer
Inscription : juin 2010
Messages : 1 551
Détails du profil
Informations personnelles :
Nom : Homme Cyrille
Âge : 25
Localisation : France

Informations professionnelles :
Activité : Network programmer

Informations forums :
Inscription : juin 2010
Messages : 1 551
Points : 4 098
Points : 4 098
Bonjour,
Citation:
Envoyé par nbs1522 Voir le message
mais comme root change, j'ai remarqué que saveroot change aussi au fur et a mesure.

avez vous une solution ?
est-ce une blague ?
Evidemment que saveroot change puisque saveroot est un pointeur sur root, autrement dit saveroot c'est juste une façon d'accéder à root, à elle et rien d'autre, pas une copie mais l'originale !

Que veux-tu faire en fait ??
A priori ce n'est pas de conserver un pointeur; tout au plus une copie mais ça a du sens ?
Bousk est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/01/2013, 14h08   #6
Logan5
Invité régulier
 
Inscription : juin 2010
Messages : 24
Détails du profil
Informations forums :
Inscription : juin 2010
Messages : 24
Points : 7
Points : 7
Tu peux utiliser une collection d'objet de type tree_node ou tree_node* genre une liste ?
Logan5 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/01/2013, 10h37   #7
white_tentacle
Membre Expert
 
Avatar de white_tentacle
 
Inscription : novembre 2008
Messages : 973
Détails du profil
Informations forums :
Inscription : novembre 2008
Messages : 973
Points : 1 180
Points : 1 180
Sauf quand on fait du très bas niveau, on ne devrait JAMAIS avoir à traiter des adresses.

Si tu veux conserver l’adresse d’une variable pour la réutiliser plus tard, ma foi, ça ressemble bien à un pointeur cette affaire. Mais ce n’est pas ton problème :

Citation:
mon problème, c'est que root change dans la suite du code, donc l'adresse change.
Je ne pense pas. Je pense que ton problème, c’est que root change de contenu, et que donc, saveroot, qui est un pointeur sur root, n’a aucune sauvegarde du contenu, et pointe vers le nouveau contenu.

Accessoirement, suivant où et comment root est alloué, un pointeur sur celui-ci est super louche --> dès que root sera détruit, le pointeur sera invalide.
white_tentacle est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 05h43.


 
 
 
 
Partenaires

Hébergement Web