OVH Cloud OVH Cloud

pointeur de pointeur

19 réponses
Avatar
PurL
Bonjour,

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

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

Merci,

PurL

10 réponses

1 2
Avatar
Marc Boyer
In article <cip6lt$4a5$, PurL wrote:
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...

Avatar
Florent 'flure' C.
Le Tue, 21 Sep 2004 14:27:15 +0200, PurL a écrit :

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 !

Avatar
Horst Kraemer
"PurL" wrote:

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!

Avatar
Vincent Lascaux
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

Avatar
Benoît Dejean
Le Tue, 21 Sep 2004 22:31:27 +0100, Vincent Lascaux a écrit :

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

Personnellement je crois n'avoir jamais eu à en arriver à de telles
extermités


et ton copain argv, tu l'oublie ?


Avatar
lascaux_cash
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à ?

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


Avatar
Jean-Marc Bourguet
(Vincent Lascaux) writes:

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

Avatar
Vincent Lascaux
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.


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

Avatar
Michaël Delva
Ben moi ça m'arrive d'en utiliser en COM avec DirectShow...

Je sais que c'est pas pur C++, mais bon ;)
Avatar
kanze
"Vincent Lascaux" wrote in message
news:<4151c2c0$0$21746$...
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.


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


1 2