 |
C++Talk.NET C++ language newsgroups
|
| View previous topic :: View next topic |
| Author |
Message |
PurL Guest
|
Posted: Tue Sep 21, 2004 12:27 pm Post subject: pointeur de pointeur |
|
|
Bonjour,
Ce code ci-dessous est-il correct (sans erreur) ?
CMaClasse **objet;
(*objet) = new CMaClasse;
Merci,
PurL
|
|
| Back to top |
|
 |
Marc Boyer Guest
|
Posted: Tue Sep 21, 2004 12:28 pm Post subject: Re: pointeur de pointeur |
|
|
In article <cip6lt$4a5$1 (AT) news-reader1 (DOT) wanadoo.fr>, PurL wrote:
| Quote: | Bonjour,
Ce code ci-dessous est-il correct (sans erreur) ?
CMaClasse **objet;
(*objet) = new CMaClasse;
|
Non, puisque objet n'a jamais été alloué,
*objet pointe sur n'importe quoi.
Marc Boyer
--
La contractualisation de la recherche, c'est me donner de l'argent pour
faire ce que je ne sais pas faire, que je fais donc mal, pendant que ce
que je sais faire, je le fais sans moyens...
|
|
| Back to top |
|
 |
Florent 'flure' C. Guest
|
Posted: Tue Sep 21, 2004 12:39 pm Post subject: Re: pointeur de pointeur |
|
|
Le Tue, 21 Sep 2004 14:27:15 +0200, PurL a écrit :
| Quote: | Bonjour,
Ce code ci-dessous est-il correct (sans erreur) ?
CMaClasse **objet;
(*objet) = new CMaClasse;
Merci,
PurL
|
Il faut faire :
objet = new (CMaClasse*);
(*objet) = new CMaClasse;
--
Florent "flure" C.
Décrypter l'@ pour répondre
Coders don't die, they just JMP without RET !
|
|
| Back to top |
|
 |
Horst Kraemer Guest
|
Posted: Tue Sep 21, 2004 8:33 pm Post subject: Re: pointeur de pointeur |
|
|
"PurL" <purl-nospam (AT) chez (DOT) com> wrote:
| Quote: | Bonjour,
Ce code ci-dessous est-il correct (sans erreur) ?
CMaClasse **objet;
(*objet) = new CMaClasse;
|
Non. C'est aussi incorrect que
char *p;
*p = 'X';
--
Horst
--
Lâche pas la patate!
|
|
| Back to top |
|
 |
Vincent Lascaux Guest
|
Posted: Tue Sep 21, 2004 9:31 pm Post subject: Re: pointeur de pointeur |
|
|
| Quote: | CMaClasse **objet;
(*objet) = new CMaClasse;
|
Par curiosité, est ce qu'il existe un cas où il est justifié d'utiliser des
pointeurs de pointeurs en C++ ?
Personnellement je crois n'avoir jamais eu à en arriver à de telles
extermités
--
Vincent
|
|
| Back to top |
|
 |
Benoît Dejean Guest
|
Posted: Tue Sep 21, 2004 10:36 pm Post subject: Re: pointeur de pointeur |
|
|
Le Tue, 21 Sep 2004 22:31:27 +0100, Vincent Lascaux a écrit :
| Quote: | CMaClasse **objet;
(*objet) = new CMaClasse;
Par curiosité, est ce qu'il existe un cas où il est justifié d'utiliser des
pointeurs de pointeurs en C++ ?
|
quand tu veux un pointeur de pointeur
| Quote: | Personnellement je crois n'avoir jamais eu à en arriver à de telles
extermités
|
et ton copain argv, tu l'oublie ?
|
|
| Back to top |
|
 |
Vincent Lascaux Guest
|
Posted: Wed Sep 22, 2004 11:54 am Post subject: Re: pointeur de pointeur |
|
|
| Quote: | Par curiosité, est ce qu'il existe un cas où il est justifié d'utiliser des
pointeurs de pointeurs en C++ ?
quand tu veux un pointeur de pointeur
|
Ah... bien sur... je suis bête...
Au fait, quand est ce que je veux un pointeur de pointeur déjà ?
| Quote: | Personnellement je crois n'avoir jamais eu à en arriver à de telles
extermités
et ton copain argv, tu l'oublie ?
|
Entre nous, argv est un mauvais exemple...
Si on avait pas du garder la compatibilité avec le C, il aurait été
preferrable d'utiliser
int main(const std::vector<std::string>& arguments)
plutot que ce
int main(int argc, char** argv)
Je pense aussi que les pointeurs de pointeurs doivent etre utiles dans
des interfaces de bibliotheques, parceque la STL c'est pas top pour
ca...
D'autres exemples ? où est ce qu'on peut dire que c'est les seuls cas
où c'est utile ?
--
Vincent
|
|
| Back to top |
|
 |
Jean-Marc Bourguet Guest
|
Posted: Wed Sep 22, 2004 12:47 pm Post subject: Re: pointeur de pointeur |
|
|
[email]lascaux_cash (AT) hotmail (DOT) com[/email] (Vincent Lascaux) writes:
| Quote: | D'autres exemples ?
|
Un systeme d'allocation ou on peut deplacer les objets et ou on garde
des pointeurs vers le pointeur unique vers l'objet. Si l'objet est
deplace on n'a qu'un pointeur a modifier (des vieux souvenirs pour
certains).
Liste doublement chainee si on ne veut pas parcourir en arriere:
template<typedef T>
struct Node {
T val;
Node<T>* next;
Node<T>** prev;
};
a moins de cas particulier a tester qu'avoir Node<T>* prev.
Passage d'un pointeur par reference dans une interface avec le C.
Je dois en oublier.
A+
--
Jean-Marc
FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ
C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html
Site de usenet-fr: http://www.usenet-fr.news.eu.org
|
|
| Back to top |
|
 |
Vincent Lascaux Guest
|
Posted: Wed Sep 22, 2004 6:21 pm Post subject: Re: pointeur de pointeur |
|
|
| Quote: | Liste doublement chainee si on ne veut pas parcourir en arriere:
template<typedef T
struct Node {
T val;
Node
Node<T>** prev;
};
a moins de cas particulier a tester qu'avoir Node<T>* prev.
|
Hum... je suis pas sur de comprendre en quoi ca simplifie. Quand tu veux
rajouter un noeud, tu alloues une Node, et tu alloues ton pointeur prev pour
ensuite lui donner la valeur du noeud précédent ?
--
Vincent
|
|
| Back to top |
|
 |
Michaël Delva Guest
|
Posted: Wed Sep 22, 2004 9:22 pm Post subject: Re: pointeur de pointeur |
|
|
Ben moi ça m'arrive d'en utiliser en COM avec DirectShow...
Je sais que c'est pas pur C++, mais bon
|
|
| Back to top |
|
 |
kanze@gabi-soft.fr Guest
|
Posted: Thu Sep 23, 2004 6:56 am Post subject: Re: pointeur de pointeur |
|
|
"Vincent Lascaux" <nospam (AT) nospam (DOT) org> wrote
| Quote: | Liste doublement chainee si on ne veut pas parcourir en arriere:
template<typedef T
struct Node {
T val;
Node
Node<T>** prev;
};
a moins de cas particulier a tester qu'avoir Node<T>* prev.
Hum... je suis pas sur de comprendre en quoi ca simplifie. Quand tu
veux rajouter un noeud, tu alloues une Node, et tu alloues ton
pointeur prev pour ensuite lui donner la valeur du noeud précédent ?
|
Je crois que l'idée, c'est de pouvoir enlever une vertice de la liste
sans en avoir un pointeur à la précédente (en dehors de ce qu'on
pourrait trouver dans la vertice même). Or, pour enlever la vertice, il
faut bien mettre à jour le pointeur next dans la vertice précédante. Je
suppose que c'est à ce pointeur que pointe prev.
Personnellement, je trouve que comme exemple, c'est un peu tiré par les
cheveux. Du moment qu'on utilise deux pointeurs, pourquoi pas simplement
une liste à chaînage double classique. Même si on n'a pas besoin de la
parcourir en arrière, c'est l'algorithme classique, bien connu de tout
le monde, et bien testé. Tandis qu'ici, on a quelque chose d'exotique
qui exige de la reflection.
--
James Kanze GABI Software http://www.gabi-soft.fr
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34
|
|
| Back to top |
|
 |
PurL Guest
|
Posted: Thu Sep 23, 2004 7:24 am Post subject: Re: pointeur de pointeur |
|
|
| Quote: | Ce code ci-dessous est-il correct (sans erreur) ?
CMaClasse **objet;
(*objet) = new CMaClasse;
|
OK, merci pour vos réponses, je me doutait bien que je laissait passer
quelques choses !
Le doute s'est installé car mon debugueur (CodeGuard) ne m'a rien signalé...
PurL
|
|
| Back to top |
|
 |
Jean-Marc Bourguet Guest
|
|
| Back to top |
|
 |
Jean-Marc Bourguet Guest
|
Posted: Thu Sep 23, 2004 7:46 am Post subject: Re: pointeur de pointeur |
|
|
"Vincent Lascaux" <nospam (AT) nospam (DOT) org> writes:
| Quote: | Liste doublement chainee si on ne veut pas parcourir en arriere:
template<typedef T
struct Node {
T val;
Node
Node<T>** prev;
};
a moins de cas particulier a tester qu'avoir Node<T>* prev.
Hum... je suis pas sur de comprendre en quoi ca simplifie. Quand tu veux
rajouter un noeud, tu alloues une Node, et tu alloues ton pointeur prev pour
ensuite lui donner la valeur du noeud précédent ?
|
Ca remplace des
(n->prev != 0) ? n->prev->next : first
par
*n->prev
(Mais comme j'ai ecrit par ailleurs, je n'utilise pas ca mais je l'ai
deja vu).
A+
--
Jean-Marc
FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ
C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html
Site de usenet-fr: http://www.usenet-fr.news.eu.org
|
|
| Back to top |
|
 |
Pierre Maurette Guest
|
Posted: Thu Sep 23, 2004 8:45 am Post subject: Re: pointeur de pointeur |
|
|
"PurL" <purl-nospam (AT) chez (DOT) com> a écrit:
| Quote: | Ce code ci-dessous est-il correct (sans erreur) ?
CMaClasse **objet;
(*objet) = new CMaClasse;
OK, merci pour vos réponses, je me doutait bien que je laissait passer
quelques choses !
Le doute s'est installé car mon debugueur (CodeGuard) ne m'a rien signalé...
CodeGuard n'est pas un débogueur, mais un outil de débogage qui n'a |
apparemment pas bonne réputation, mais qui me sert bien. Je l'utilise
avec C++ Builder, et il demande quelques précautions d'emploi (dont la
lecture de la doc !). Il faut par exemple savoir qu'il intercepte les
allocations mémoire, et que malheureusement l'identité de comportement
selon qu'on lie ou non CG n'est pas garantie.
Il est généralement muet surtout quand le programme est testé dans
l'EDI, il faut impérativement consulter le fichier projet.cgl.
Pour tester :
AnsiString ** objet;
//objet = new AnsiString*;
(*objet) = new AnsiString;
EditTest->Text = **objet;
//delete (*objet);
//delete objet;
(complètement décommenté, AMHA, ce code est valide).
Remarque: j'utilise généralement des trucs comme:
typedef AnsiString* pAS;
typedef AnsiString** ppAS;
--
Pierre
|
|
| Back to top |
|
 |
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
|