J'essaie de comprendre ce qui cloche dans le programme ci-dessous,
j'obtiens une segmentation fault... Avec Valgrind je n'arrive pas =E0
savoir ce qui cloche. =C7a doit =EAtre trivial, mais je suis newbie en
C++, et en particulier avec les vector...
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Loïc Joly
Bonjour,
J'essaie de comprendre ce qui cloche dans le programme ci-dessous, j'obtiens une segmentation fault... Avec Valgrind je n'arrive pas à savoir ce qui cloche. Ça doit être trivial, mais je suis newbie en C++, et en particulier avec les vector...
Un objet en C++ a besoin que son constructeur soit appelé. Or malloc ne construit pas un objet, il ne fait qu'allouer de la mémoire. Donc si on veut initialiser un pointeur avec un nouvel objet, il ne faut pas faire :
Ensuite, je ne comprend pas vraiment pourquoi tu déclares un vector<test *> * p;
Au lieu d'un vector<test *> p; Voire un vector<test> p;
Même si il peut y avoir intérêt à un vecteur de pointeur, un pointeur de vecteur est moins souvent utile. Une des règles de bonne conduite en C++ est de ne pas utiliser des pointeurs à moins d'être certain d'en avoir besoin (polymorphisme, décorréler la durée de vie du scope...).
-- Loïc
Bonjour,
J'essaie de comprendre ce qui cloche dans le programme ci-dessous,
j'obtiens une segmentation fault... Avec Valgrind je n'arrive pas à
savoir ce qui cloche. Ça doit être trivial, mais je suis newbie en
C++, et en particulier avec les vector...
Un objet en C++ a besoin que son constructeur soit appelé. Or malloc ne
construit pas un objet, il ne fait qu'allouer de la mémoire. Donc si on
veut initialiser un pointeur avec un nouvel objet, il ne faut pas faire :
Ensuite, je ne comprend pas vraiment pourquoi tu déclares un
vector<test *> * p;
Au lieu d'un
vector<test *> p;
Voire un
vector<test> p;
Même si il peut y avoir intérêt à un vecteur de pointeur, un pointeur de
vecteur est moins souvent utile.
Une des règles de bonne conduite en C++ est de ne pas utiliser des
pointeurs à moins d'être certain d'en avoir besoin (polymorphisme,
décorréler la durée de vie du scope...).
J'essaie de comprendre ce qui cloche dans le programme ci-dessous, j'obtiens une segmentation fault... Avec Valgrind je n'arrive pas à savoir ce qui cloche. Ça doit être trivial, mais je suis newbie en C++, et en particulier avec les vector...
Un objet en C++ a besoin que son constructeur soit appelé. Or malloc ne construit pas un objet, il ne fait qu'allouer de la mémoire. Donc si on veut initialiser un pointeur avec un nouvel objet, il ne faut pas faire :
Ensuite, je ne comprend pas vraiment pourquoi tu déclares un vector<test *> * p;
Au lieu d'un vector<test *> p; Voire un vector<test> p;
Même si il peut y avoir intérêt à un vecteur de pointeur, un pointeur de vecteur est moins souvent utile. Une des règles de bonne conduite en C++ est de ne pas utiliser des pointeurs à moins d'être certain d'en avoir besoin (polymorphisme, décorréler la durée de vie du scope...).
-- Loïc
enochatearth
Salut,
Merci pour ta réponse, maintenant ça marche. En fait, je n'avais lu l'utilisation de new que pour des objets définis par le programmeur:
test * tmptest = new test;
Je ne pensais pas qu'on pouvait (qu'il fallait) l'utiliser aussi pour initialiser des vecteurs.
Quant à ton interrogation, j'ai utilisé un vecteur de pointeurs pour pouvoir bénéficier du polymorphisme. En fait, j'ai des problèmes, et cela ne marche pas comme je veux. Mais pour l'instant, je cherche à faire fonctionner mon programme. Je note toutes mes interrogations, et j'espère y avoir la réponse dans la lecture d'un bouquin qui approfondit plus le sujet (pour l'instant je n'ai lu qu'un bouquin introductif).
Merci,
Jules
Salut,
Merci pour ta réponse, maintenant ça marche.
En fait, je n'avais lu l'utilisation de new que pour des objets définis
par le programmeur:
test * tmptest = new test;
Je ne pensais pas qu'on pouvait (qu'il fallait) l'utiliser aussi pour
initialiser des vecteurs.
Quant à ton interrogation, j'ai utilisé un vecteur de pointeurs pour
pouvoir bénéficier du polymorphisme. En fait, j'ai des problèmes, et
cela ne marche pas comme je veux.
Mais pour l'instant, je cherche à faire fonctionner mon programme. Je
note toutes mes interrogations, et j'espère y avoir la réponse dans la
lecture d'un bouquin qui approfondit plus le sujet (pour l'instant je
n'ai lu qu'un bouquin introductif).
Merci pour ta réponse, maintenant ça marche. En fait, je n'avais lu l'utilisation de new que pour des objets définis par le programmeur:
test * tmptest = new test;
Je ne pensais pas qu'on pouvait (qu'il fallait) l'utiliser aussi pour initialiser des vecteurs.
Quant à ton interrogation, j'ai utilisé un vecteur de pointeurs pour pouvoir bénéficier du polymorphisme. En fait, j'ai des problèmes, et cela ne marche pas comme je veux. Mais pour l'instant, je cherche à faire fonctionner mon programme. Je note toutes mes interrogations, et j'espère y avoir la réponse dans la lecture d'un bouquin qui approfondit plus le sujet (pour l'instant je n'ai lu qu'un bouquin introductif).
Merci,
Jules
enochatearth
Salut,
Merci pour ta réponse, maintenant ça marche. En fait, je n'avais lu l'utilisation de new que pour des objets définis par le programmeur:
test * tmptest = new test;
Je ne pensais pas qu'on pouvait (qu'il fallait) l'utiliser aussi pour initialiser des vecteurs.
Quant à ton interrogation, j'ai utilisé un vecteur de pointeurs pour pouvoir bénéficier du polymorphisme. En fait, j'ai des problèmes, et cela ne marche pas comme je veux. Mais pour l'instant, je cherche à faire fonctionner mon programme. Je note toutes mes interrogations, et j'espère y avoir la réponse dans la lecture d'un bouquin qui approfondit plus le sujet (pour l'instant je n'ai lu qu'un bouquin introductif).
Merci,
Jules
Salut,
Merci pour ta réponse, maintenant ça marche.
En fait, je n'avais lu l'utilisation de new que pour des objets définis
par le programmeur:
test * tmptest = new test;
Je ne pensais pas qu'on pouvait (qu'il fallait) l'utiliser aussi pour
initialiser des vecteurs.
Quant à ton interrogation, j'ai utilisé un vecteur de pointeurs pour
pouvoir bénéficier du polymorphisme. En fait, j'ai des problèmes, et
cela ne marche pas comme je veux.
Mais pour l'instant, je cherche à faire fonctionner mon programme. Je
note toutes mes interrogations, et j'espère y avoir la réponse dans la
lecture d'un bouquin qui approfondit plus le sujet (pour l'instant je
n'ai lu qu'un bouquin introductif).
Merci pour ta réponse, maintenant ça marche. En fait, je n'avais lu l'utilisation de new que pour des objets définis par le programmeur:
test * tmptest = new test;
Je ne pensais pas qu'on pouvait (qu'il fallait) l'utiliser aussi pour initialiser des vecteurs.
Quant à ton interrogation, j'ai utilisé un vecteur de pointeurs pour pouvoir bénéficier du polymorphisme. En fait, j'ai des problèmes, et cela ne marche pas comme je veux. Mais pour l'instant, je cherche à faire fonctionner mon programme. Je note toutes mes interrogations, et j'espère y avoir la réponse dans la lecture d'un bouquin qui approfondit plus le sujet (pour l'instant je n'ai lu qu'un bouquin introductif).
Merci,
Jules
Pierre THIERRY
Le Fri, 13 May 2005 04:26:23 -0700, enochatearth a écrit :
En fait, je n'avais lu l'utilisation de new que pour des objets définis par le programmeur:
À ma connaissance, il n'y a pas de différence, pour le compilo, entre la STL et tes classes. Tous sont définis exactement de la même façon.
Quant à ton interrogation, j'ai utilisé un vecteur de pointeurs pour pouvoir bénéficier du polymorphisme.
Tu vas écrire des classes dérivées de vector ? Si c'est du polymorphisme dans ta classe, dont tu as besoin, il n'est pas nécessaire d'avoir un pointeur sur le vecteur...
(pour l'instant je n'ai lu qu'un bouquin introductif)
J'ai l'impression qu'il faut se méfier des intros sur C++ : on y voit superficiellement traitées pleins de notions qu'on risque ensuite d'utiliser à mauvais escient.
Brièvement, Nowhere man --
OpenPGP 0xD9D50D8A
Le Fri, 13 May 2005 04:26:23 -0700, enochatearth a écrit :
En fait, je n'avais lu l'utilisation de new que pour des objets
définis par le programmeur:
À ma connaissance, il n'y a pas de différence, pour le compilo, entre la
STL et tes classes. Tous sont définis exactement de la même façon.
Quant à ton interrogation, j'ai utilisé un vecteur de pointeurs pour
pouvoir bénéficier du polymorphisme.
Tu vas écrire des classes dérivées de vector ? Si c'est du polymorphisme
dans ta classe, dont tu as besoin, il n'est pas nécessaire d'avoir un
pointeur sur le vecteur...
(pour l'instant je n'ai lu qu'un bouquin introductif)
J'ai l'impression qu'il faut se méfier des intros sur C++ : on y voit
superficiellement traitées pleins de notions qu'on risque ensuite
d'utiliser à mauvais escient.
Brièvement,
Nowhere man
--
nowhere.man@levallois.eu.org
OpenPGP 0xD9D50D8A
Le Fri, 13 May 2005 04:26:23 -0700, enochatearth a écrit :
En fait, je n'avais lu l'utilisation de new que pour des objets définis par le programmeur:
À ma connaissance, il n'y a pas de différence, pour le compilo, entre la STL et tes classes. Tous sont définis exactement de la même façon.
Quant à ton interrogation, j'ai utilisé un vecteur de pointeurs pour pouvoir bénéficier du polymorphisme.
Tu vas écrire des classes dérivées de vector ? Si c'est du polymorphisme dans ta classe, dont tu as besoin, il n'est pas nécessaire d'avoir un pointeur sur le vecteur...
(pour l'instant je n'ai lu qu'un bouquin introductif)
J'ai l'impression qu'il faut se méfier des intros sur C++ : on y voit superficiellement traitées pleins de notions qu'on risque ensuite d'utiliser à mauvais escient.