C++Talk.NET Forum Index C++Talk.NET
C++ language newsgroups
 
Archives   FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

pointeur de pointeur
Goto page 1, 2  Next
 
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (French)
View previous topic :: View next topic  
Author Message
PurL
Guest





PostPosted: Tue Sep 21, 2004 12:27 pm    Post subject: pointeur de pointeur Reply with quote



Bonjour,

Ce code ci-dessous est-il correct (sans erreur) ?

CMaClasse **objet;
(*objet) = new CMaClasse;

Merci,

PurL


Back to top
Marc Boyer
Guest





PostPosted: Tue Sep 21, 2004 12:28 pm    Post subject: Re: pointeur de pointeur Reply with quote



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





PostPosted: Tue Sep 21, 2004 12:39 pm    Post subject: Re: pointeur de pointeur Reply with quote



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





PostPosted: Tue Sep 21, 2004 8:33 pm    Post subject: Re: pointeur de pointeur Reply with quote

"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





PostPosted: Tue Sep 21, 2004 9:31 pm    Post subject: Re: pointeur de pointeur Reply with quote

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





PostPosted: Tue Sep 21, 2004 10:36 pm    Post subject: Re: pointeur de pointeur Reply with quote

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





PostPosted: Wed Sep 22, 2004 11:54 am    Post subject: Re: pointeur de pointeur Reply with quote

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





PostPosted: Wed Sep 22, 2004 12:47 pm    Post subject: Re: pointeur de pointeur Reply with quote

[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





PostPosted: Wed Sep 22, 2004 6:21 pm    Post subject: Re: pointeur de pointeur Reply with quote

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





PostPosted: Wed Sep 22, 2004 9:22 pm    Post subject: Re: pointeur de pointeur Reply with quote

Ben moi ça m'arrive d'en utiliser en COM avec DirectShow...

Je sais que c'est pas pur C++, mais bon Wink
Back to top
kanze@gabi-soft.fr
Guest





PostPosted: Thu Sep 23, 2004 6:56 am    Post subject: Re: pointeur de pointeur Reply with quote

"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





PostPosted: Thu Sep 23, 2004 7:24 am    Post subject: Re: pointeur de pointeur Reply with quote

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





PostPosted: Thu Sep 23, 2004 7:42 am    Post subject: Re: pointeur de pointeur Reply with quote

[email]kanze (AT) gabi-soft (DOT) fr[/email] writes:

Quote:
Personnellement, je trouve que comme exemple, c'est un peu tiré par les
cheveux.

Tire par les cheveux, pas tellement parce que je l'ai deja vu. Mais
j'aurais du preciser que ce n'est pas quelque chose que j'emploie
(j'ai un template qui fait ce qu'il faut quand j'ai besoin de listes
invasives et sinon j'ai std::list).

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
Jean-Marc Bourguet
Guest





PostPosted: Thu Sep 23, 2004 7:46 am    Post subject: Re: pointeur de pointeur Reply with quote

"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





PostPosted: Thu Sep 23, 2004 8:45 am    Post subject: Re: pointeur de pointeur Reply with quote

"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
Display posts from previous:   
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (French) All times are GMT
Goto page 1, 2  Next
Page 1 of 2

 
Jump to:  
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


Powered by phpBB © 2001, 2006 phpBB Group
SEO toolkit © 2004-2006 webmedic.