Taron31
Messages postés199Date d'inscriptionvendredi 16 avril 2004StatutMembreDernière intervention28 février 2008 25 sept. 2005 à 09:25
Merci :-)
sbeuz
Messages postés6Date d'inscriptionmercredi 25 août 2004StatutMembreDernière intervention23 septembre 2005 23 sept. 2005 à 22:27
La methode est interessante :)
De + tu utilises une classe plutôt qu'une variable de type structuré. A++
Taron31
Messages postés199Date d'inscriptionvendredi 16 avril 2004StatutMembreDernière intervention28 février 2008 8 sept. 2005 à 18:54
Ha, ok merci :)
J'avais pas fait gaffe...
magic_Nono
Messages postés1878Date d'inscriptionjeudi 16 octobre 2003StatutMembreDernière intervention16 mars 2011 8 sept. 2005 à 09:27
évidemment....
=>mémoriser le ptr suivant avt de libérer l'elt...
DubbleM
Messages postés2Date d'inscriptiondimanche 27 juillet 2003StatutMembreDernière intervention 8 septembre 2005 8 sept. 2005 à 08:14
Analyson ta liberation de mémoire dans le destructeur (imaginons que l'on enlève ton commentaire):
for(; Temp !0 ; Temp Temp->Next)
free(Temp);
Que ce passe-t-il à l'exécution
1) première partie du for initialisation : rien car for(;...)
2) Teste de fin Temp!=0 (temp est rempli plus haut, imaginons qu'il y ai 2 elements donc temp!=0
3) tu libère la mémoire sur la quelle temp pointe (free Temp)
4) tu viens à la 3ème partie du for Temp=Temp->Next mais Temp (partie de droite) n'est plus alloué car tu a fait free, ton problème est a mon avis à ce niveau. Faudrait peut-être penser à sauver Temp->Next avant le free.
Taron31
Messages postés199Date d'inscriptionvendredi 16 avril 2004StatutMembreDernière intervention28 février 2008 7 sept. 2005 à 19:22
oui : liste doublement chainée pour simuler les classes LIST de la STL...
Zazour
Messages postés120Date d'inscriptionmercredi 7 mai 2003StatutMembreDernière intervention14 janvier 2006 7 sept. 2005 à 18:10
ok,j'ai posté un peu vite en ne regarde pas le contenu,mais je regarderai ta source,cela parle de liste chainée.
Taron31
Messages postés199Date d'inscriptionvendredi 16 avril 2004StatutMembreDernière intervention28 février 2008 7 sept. 2005 à 16:24
Zazour : c'est juste un petit exercice que j'ai posté pour les débutants, c'est une implementation...
Dans ce code je me suis servi des listes doublement chainées en C, ça peut apprendre a mieux s'en servir, d'autres personnes peuvent reprendre mon code et rajouter des fonctionnalistes (classement alphabet, etc..., CF BListeIndir de magic_nono).
C'ests ur que dans un projet, tu vas pas recoder une classe List, tu utiliseras direct la STL :)
Bye !
Zazour
Messages postés120Date d'inscriptionmercredi 7 mai 2003StatutMembreDernière intervention14 janvier 2006 7 sept. 2005 à 15:32
pourquoi faire une classe "list" à la place d'utiliser directement "list" de la STL?
Taron31
Messages postés199Date d'inscriptionvendredi 16 avril 2004StatutMembreDernière intervention28 février 2008 7 sept. 2005 à 13:13
Magic_nono : Ok, merci... je vais corriger ça :)
Marik7335 : Ok j'implemente je vais implementer les iterateurs des que j'aurais le temps :)
Encore merci a tous pour vos commentaires
marik7335
Messages postés115Date d'inscriptionsamedi 27 décembre 2003StatutMembreDernière intervention11 mai 2009 7 sept. 2005 à 12:45
C'est pas mal, le concept est intéressant. Par contre, la class list de la STL implémente les itérateurs. ça serait intéressant de le faire.
magic_Nono
Messages postés1878Date d'inscriptionjeudi 16 octobre 2003StatutMembreDernière intervention16 mars 2011 6 sept. 2005 à 23:29
Bien
prend l'habitude de distinguer les variables membres de tes classes:
par exemple, l'usage est de les préfixer par 'm_'
de plus, évite les données publiques (tout comme tu évites déjà les variables globales)
cela donnerai qqch comme ça
template <typename T>
class List
{
private:
typedef struct Link // Struct for linked list
{
T Value; // Value of new object
Link *Next;
Link *Prev;
}Link;
Link *m_End;
Link *m_Temp;
Link *m_Head;
public:
...
}
et vérifie que m_Temp soit vraiement util.
Pour poursuivre plus loin
tu peux te reporter sur BListeIndir qui est publié dans mes sources.
Bonne prog
Nono.
PS
qq rq sur ton constructeur, pour t'aider à reprendre ta classe
# template <typename T>
# List<T>::List() /* Constructor */
# {
# Head = (Link *)malloc(sizeof(Link)); /* Prepare the list */
# Head->Next = 0;
# Head->Prev = 0;
# Head->Value = 0;
#
# End = Head;
//là tu as égalisé end & head (c'est le mm élément)
//la suite est donc inutile
# End->Next = 0;
# End->Prev = 0;
# }
25 sept. 2005 à 09:25
23 sept. 2005 à 22:27
De + tu utilises une classe plutôt qu'une variable de type structuré. A++
8 sept. 2005 à 18:54
J'avais pas fait gaffe...
8 sept. 2005 à 09:27
=>mémoriser le ptr suivant avt de libérer l'elt...
8 sept. 2005 à 08:14
for(; Temp !0 ; Temp Temp->Next)
free(Temp);
Que ce passe-t-il à l'exécution
1) première partie du for initialisation : rien car for(;...)
2) Teste de fin Temp!=0 (temp est rempli plus haut, imaginons qu'il y ai 2 elements donc temp!=0
3) tu libère la mémoire sur la quelle temp pointe (free Temp)
4) tu viens à la 3ème partie du for Temp=Temp->Next mais Temp (partie de droite) n'est plus alloué car tu a fait free, ton problème est a mon avis à ce niveau. Faudrait peut-être penser à sauver Temp->Next avant le free.
7 sept. 2005 à 19:22
7 sept. 2005 à 18:10
7 sept. 2005 à 16:24
Dans ce code je me suis servi des listes doublement chainées en C, ça peut apprendre a mieux s'en servir, d'autres personnes peuvent reprendre mon code et rajouter des fonctionnalistes (classement alphabet, etc..., CF BListeIndir de magic_nono).
C'ests ur que dans un projet, tu vas pas recoder une classe List, tu utiliseras direct la STL :)
Bye !
7 sept. 2005 à 15:32
7 sept. 2005 à 13:13
Marik7335 : Ok j'implemente je vais implementer les iterateurs des que j'aurais le temps :)
Encore merci a tous pour vos commentaires
7 sept. 2005 à 12:45
6 sept. 2005 à 23:29
prend l'habitude de distinguer les variables membres de tes classes:
par exemple, l'usage est de les préfixer par 'm_'
de plus, évite les données publiques (tout comme tu évites déjà les variables globales)
cela donnerai qqch comme ça
template <typename T>
class List
{
private:
typedef struct Link // Struct for linked list
{
T Value; // Value of new object
Link *Next;
Link *Prev;
}Link;
Link *m_End;
Link *m_Temp;
Link *m_Head;
public:
...
}
et vérifie que m_Temp soit vraiement util.
Pour poursuivre plus loin
tu peux te reporter sur BListeIndir qui est publié dans mes sources.
Bonne prog
Nono.
PS
qq rq sur ton constructeur, pour t'aider à reprendre ta classe
# template <typename T>
# List<T>::List() /* Constructor */
# {
# Head = (Link *)malloc(sizeof(Link)); /* Prepare the list */
# Head->Next = 0;
# Head->Prev = 0;
# Head->Value = 0;
#
# End = Head;
//là tu as égalisé end & head (c'est le mm élément)
//la suite est donc inutile
# End->Next = 0;
# End->Prev = 0;
# }
pour le destructeur enfin
template <typename T>
List<T>::~List() // Destructor
{
Link* temp;
for( temp= Head;temp;temp=temp->Next)
free(temp);
}
si tout le reste est bon, y a pas de raison que ça ne passe pas.