Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2916 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  Delete et tableau de pointeurs

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Delete et tableau de pointeurs

n°226214
spark
Luc ?
Posté le 10-10-2002 à 14:40:13  profilanswer
 

une fois de plus, je suis totalement embrouillé dans les pointeurs
 
j'ai donc 2 classes A et B.
 
j'ai fait:

Code :
  1. Class A
  2. {
  3. ...blablabla
  4. }
  5. Class B
  6. {
  7.   ...blablabla...
  8.   c **A;
  9.   ...blablabla...
  10. }
  11. B::B()
  12. {
  13.   // Allocation
  14.   c = new A*[50];
  15.   // Mise à NULL des pointeurs
  16.   for(int i=0; i<50; i++)
  17.   {
  18.     c[i] = NULL;
  19.   }
  20. }


Bon, apres je remplis mon bordel avec des c[i] = new B();
Et à la fin, je libere tout avec

Code :
  1. for( int i=0; i<50; i++)
  2. {
  3.   if( c[i] != NULL)
  4.   {
  5.     delete c[i];
  6.   }
  7. }


 
La question est :  
Est ce que mon tableau 'c' de 50 cases est aussi désalloué ?
Parce que dans ma tete, c = c[0] nan ?
Faut que je fasse un 'delete c;' après ma boucle ?
Si j'ai fait n'imp, merci de me montrer où.


Message édité par spark le 10-10-2002 à 14:48:57
mood
Publicité
Posté le 10-10-2002 à 14:40:13  profilanswer
 

n°226218
spark
Luc ?
Posté le 10-10-2002 à 14:44:35  profilanswer
 

... j'ai du mal ...
j'ai trouvé :
 
c'est :

Code :
  1. *c = c[0];


donc faut bien que je fasse un

Code :
  1. delete c;

après...

n°226221
BifaceMcLe​OD
The HighGlandeur
Posté le 10-10-2002 à 14:51:58  profilanswer
 

Ceci dit, si tu fais un

Code :
  1. delete [] c;

à la place de la boucle pour désallouer les éléments de ton tableau, ce sera plus propre, plus simple et plus sûr. Ca désalloue le tableau (alloué par new[]) et tous les éléments qu'il contient, lorsqu'ils ont été alloués par new ou new[].
 
A part ça, ta déclaration de la classe B est vraiment bizarre...  :heink: Si je comprends bien, B contient un attribut c de type pointeur vers pointeur vers A (ce qui s'exprime par "A** c" et non "c **A", d'ailleurs).
Ce que me confirme la ligne :

Code :
  1. c = new A*[50];


Mais dans ce cas, tu ne peux pas affecter une valeur de type B* à c[i] dans la ligne :

Code :
  1. c = new B();

car [i]A* et B* sont 2 types complètement différents (tout comme le sont les types A et B).


Message édité par BifaceMcLeOD le 10-10-2002 à 14:55:04
n°226223
spark
Luc ?
Posté le 10-10-2002 à 15:06:29  profilanswer
 

Ouais, j'me suis 'un peu' vautré dans les syntaxes :D
c'est bien des A* que je stocke dans un tableau c dans ma classe B.
 
Sinon, merci beaucoup pour le delete [] c;  
J'avais totalement oublié que ca existait, et c'est effectivement bcp + propre que ma vieille boucle.

n°226269
BifaceMcLe​OD
The HighGlandeur
Posté le 10-10-2002 à 16:35:43  profilanswer
 

Copier/coller rulez...  ;)

n°226304
spark
Luc ?
Posté le 10-10-2002 à 17:11:21  profilanswer
 

Non, c n'imp !
J'viens de me prendre la tete pour rien pendant 2h.....
 
le delete [] ne fonctionne que si c'est un tableau d'objets.
avec un tableau de pointeurs sur ces objets, le delete ne fonctionne pas, le destructeur n'est pas appellé.  
J'ai fais tout plein de tests pour ca.
Donc faut faire une boucle comme j'avais fais pour chaque effacer chaque element du tableau.
Ce qui confirme la regle:  
il doit y avoir autant de delete que de new.
 
Bon, sur ce, je me casse, bonne soirée @demain

n°226526
Musaran
Cerveaulté
Posté le 11-10-2002 à 03:08:34  profilanswer
 

C'est pas bien d'embrouiller ceux qui posent des questions.
Si l'objet détruit est un pointeur, ce qui est pointé n'est pas affecté.
 

Code :
  1. if( c[i] != NULL)
  2. delete c[i];

Inutile !
On à le droit de deleter NULL, ça ne fait rien.


---------------
Bricocheap: Montage de ventilo sur paté de mastic silicone
n°226527
LeGreg
Posté le 11-10-2002 à 03:53:47  profilanswer
 

c != c[0]
(ou alors seulement dans ta tete)
 
en fait c[0]==*c dans le cas d'un type*.
 
LeGreg

n°226626
spark
Luc ?
Posté le 11-10-2002 à 10:45:04  profilanswer
 

Musaran a écrit a écrit :

C'est pas bien d'embrouiller ceux qui posent des questions.
Si l'objet détruit est un pointeur, ce qui est pointé n'est pas affecté.
 

Code :
  1. if( c[i] != NULL)
  2. delete c[i];

Inutile !
On à le droit de deleter NULL, ça ne fait rien.




ok, merci, ca fera plus propre :)

n°226628
BifaceMcLe​OD
The HighGlandeur
Posté le 11-10-2002 à 10:47:33  profilanswer
 

Toutes mes viles excuses...  :jap:

mood
Publicité
Posté le 11-10-2002 à 10:47:33  profilanswer
 

n°226630
spark
Luc ?
Posté le 11-10-2002 à 10:51:02  profilanswer
 

BifaceMcLeOD a écrit a écrit :

Toutes mes viles excuses...  :jap:  




 
Lol, c pas grave, au moins j'ai tout testé dans tous les sens, et j'ai tout compris maintenant. :D
J'ai appris plein de trucs là, meme si j'ai failli manger mon clavier...

n°226681
chrisbk
-
Posté le 11-10-2002 à 13:09:54  profilanswer
 

ce spark la est il le spark que je connais ? [:wam]

n°226719
spark
Luc ?
Posté le 11-10-2002 à 14:15:22  profilanswer
 

oui, c bien le spark que tu connais.
t'as vu, j'ai un peu laché le VB :D

n°226760
chrisbk
-
Posté le 11-10-2002 à 14:59:03  profilanswer
 

ouais mais visiblement t'aurais pas du [:ddr555]
 
T tjs sur besac ?  


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  Delete et tableau de pointeurs

 

Sujets relatifs
[HTML] Pb de BACKGROUNG dans un tableau ...TABLEAU DYNAMIQUE
Une fonction peut-elle renvoyer un tableau ? (résolu)lire et mettre un octet dans un tableau sous PERL
problème de mise en forme d'un formulaire dans un tableau[PHP]insertion donne de base de donne dan tableau
array_push( ) et tableau associatif...[CSS] couleur de bordure d'un tableau
probleme avec un tableau a deux dimensionsChanger la couleur d'un tableau
Plus de sujets relatifs à : Delete et tableau de pointeurs


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR