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

  FORUM HardWare.fr
  Programmation
  C++

  A propos des pointeurs.[Débutant]

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

A propos des pointeurs.[Débutant]

n°1078166
vincent0
Posté le 10-05-2005 à 17:20:23  profilanswer
 

Bonjour,
 
Quand on fait "classe variable[256]", ça réserve 256*size(classe) de place mémoire ?
Mais quand on fait "classe *variable[256]", qu'est ce que ça fait exactement ?
 
Merci d'avance...


Message édité par vincent0 le 12-05-2005 à 10:27:42
mood
Publicité
Posté le 10-05-2005 à 17:20:23  profilanswer
 

n°1078173
chagarou
Posté le 10-05-2005 à 17:25:34  profilanswer
 

1. oui
2. ca créer 256 pointeurs* qui pointent sur n'importe quoi vu que pas initialisés.
 
* 4 octets/pointeurs sur PC et avec les compilateurs que j'ai pu utiliser :o

n°1078248
vincent0
Posté le 10-05-2005 à 18:14:09  profilanswer
 

Merci...
 
Deux autres petites questions:
L'instruction "delete[] variable;" permet de libérer tous les pointeurs non initialisés ?
 
Quelle différence y a-il entre ses 2 lignes de code:
classe variable(...paramètres...);
classe *variable = new classe(...paramètres...);

n°1078249
blastman
just me !
Posté le 10-05-2005 à 18:16:35  profilanswer
 

dans le deuxieme cas tu alloue dynamiquement de la mémoire, pas dans le premier


Message édité par blastman le 10-05-2005 à 18:18:13

---------------
http://www.blastmanu.info
n°1078261
skelter
Posté le 10-05-2005 à 18:25:19  profilanswer
 

vincent0 a écrit :

Merci...
L'instruction "delete[] variable;" permet de libérer tous les pointeurs non initialisés ?


 
ca detruit une collection d'objets et libere l'emplacement pointé par 'variable'

n°1078279
++fab
victime du syndrome IH
Posté le 10-05-2005 à 18:38:20  profilanswer
 

vincent0 a écrit :


L'instruction "delete[] variable;" permet de libérer tous les pointeurs non initialisés ?


 
non, delete[] désalloue de la mémoire allouée par new[].

n°1078300
vincent0
Posté le 10-05-2005 à 18:44:15  profilanswer
 

Donc si dans un fichier .h j'ai ceci:
classe variable[256];
et dans le fichier .cpp ceci:
variable[0] = new classe(???);
variable[1] = new classe(???);
variable[2] = new classe(???);
....
variable[55] = new classe(???);
 
je perd 200*4 octets ? Y a-til une solution pour éviter ça ?


Message édité par vincent0 le 10-05-2005 à 18:46:35
n°1078310
skelter
Posté le 10-05-2005 à 18:48:37  profilanswer
 

utilises std::vector

n°1080024
ptitchep
Posté le 11-05-2005 à 20:07:26  profilanswer
 

Tu n'as pas définit tableau comme un tableau de pointeurs, tu ne peux donc pas faire  
variables[0]=new classe(???)
Tu dois pour cela faire classe *variable[256]
 
Si tu ne veux pas perdre de mémoire, il faut que tu alloue ton tableau de pointeurs dynamiquement lui aussi. Comme ça tu choisit la taille en fonction de tes besoins et tu peux changer cette taille.


---------------
deluser --remove-home ptitchep
n°1080423
f4brice
ça passe à 0 !
Posté le 12-05-2005 à 00:00:38  profilanswer
 

ptitchep a écrit :

Tu n'as pas définit tableau comme un tableau de pointeurs, tu ne peux donc pas faire  
variables[0]=new classe(???)
Tu dois pour cela faire classe *variable[256]
 
Si tu ne veux pas perdre de mémoire, il faut que tu alloue ton tableau de pointeurs dynamiquement lui aussi. Comme ça tu choisit la taille en fonction de tes besoins et tu peux changer cette taille.

Toutafé.
 
Tu devrais faire un truc du genre :
(les tailles supposent qu'un pointeur occupe 4 octets)
 

Code :
  1. classe** variable; // alloue 1 pointeur sur un pointeur (4 octets)
  2. variable = new classe* [N]; // alloue N pointeurs sur classe (non initialisés, N*4 octets)
  3. for(i=0 ; i<N ; i++)
  4. {
  5.   variable[i] = new classe(...);  // alloue 1 objet type classe
  6. }
  7. ...
  8. for(i=0 ; i<N ; i++)
  9. {
  10.   delete variable[i];
  11. }
  12. delete variable;


mood
Publicité
Posté le 12-05-2005 à 00:00:38  profilanswer
 

n°1080427
skelter
Posté le 12-05-2005 à 00:07:50  profilanswer
 

une collection de pointeur, il faut que ce soit justifié
std::vector<classe> est plus pratique

n°1081207
casafa
Posté le 12-05-2005 à 17:33:25  profilanswer
 

Merci de vos réponses

n°1081367
ptitchep
Posté le 12-05-2005 à 19:32:27  profilanswer
 

Citation :

une collection de pointeur, il faut que ce soit justifié  
std::vector<classe> est plus pratique


 
Tu pourrais détailler stp?


---------------
deluser --remove-home ptitchep
n°1081407
skelter
Posté le 12-05-2005 à 20:17:00  profilanswer
 

c'est a toi d'expliquer pourquoi
classe** variable;
et pas
classe* variable = new classe[n];
 
?

n°1081434
ptitchep
Posté le 12-05-2005 à 20:31:36  profilanswer
 

parce que  
classe* variable=new classe[n]
va créer un pointeur sur un tableau de n objets de type classe, variable[0] sera un objet et non un pointeur donc impossible de faire
variable[0]=new classe(param);
 
alors que  
classe **variable
variable = new classe* [N];  
va créer un tableau de N pointeurs sur des objets de type classe  
 
et ensuite   on peut faire
variable[0]=new classe(param);
...
variable[n]=new classe(param);
 
car variable[n] est un pointeur!


---------------
deluser --remove-home ptitchep
n°1081437
ptitchep
Posté le 12-05-2005 à 20:32:42  profilanswer
 

c'est quoi
std::vector<classe>  
????


---------------
deluser --remove-home ptitchep
n°1081443
IrmatDen
Posté le 12-05-2005 à 20:37:29  profilanswer
 

C'est un tableau de classe. Jette un coup d'oeil à sa doc...

n°1081447
skelter
Posté le 12-05-2005 à 20:41:13  profilanswer
 

ptitchep a écrit :

c'est quoi
std::vector<classe>  
????


 
variable[0]= classe(param);
mais new[] aura deja appelé le constructeur par defaut et l'affectation crée une copie temporaire
 
tu peux faire
 
std::vector est un modele de tableau redimensionnable
 
std::vector<classe> variable;
variable.reserve(n); // alloue sans construire
et n push_back( class(...) ); // toujours copie temporaire
 
mais classe ** c'est cher payé, je ne connais pas trop C++ mais il doit bien y avoir de meilleur solutions


Message édité par skelter le 12-05-2005 à 20:41:42
n°1081460
ptitchep
Posté le 12-05-2005 à 21:00:23  profilanswer
 

Moi non plus je connais pas des masses C++ et il est fort possible que ta tech soit mieux.
En cours de C on m'a appris comme ça et j'ai des cours de C++ que depuis 4 semaines (ms je connaissais un peu avant) et le prof nous fait bosser comme ça...
A creuser...


---------------
deluser --remove-home ptitchep
n°1081508
IrmatDen
Posté le 12-05-2005 à 21:46:08  profilanswer
 

Si tu veux un tableau à 2 dimensions, utilises un vector de vector.
Avec une déclaration du type : vector< vector<int> > matrice;
Pour déclarer un tableau d'int à 2 dimensions.
C'est bien plus facile et plus sûr que les new et delete.

n°1081516
skelter
Posté le 12-05-2005 à 21:55:31  profilanswer
 

ouai, sauf que vector< vector<int> > si pour une matrice ca sera pas top niveau perf pour les calcul


Message édité par skelter le 12-05-2005 à 21:55:58
n°1081599
IrmatDen
Posté le 12-05-2005 à 22:51:12  profilanswer
 

C'était histoire de donner vie à l'exemple (j'y réfléchirais à 2 fois le prochain coup)... un dico des synonymes avec un vector de vector de string ?

n°1111347
NounouRs
Non parce que c pas mon pied !
Posté le 07-06-2005 à 15:58:46  profilanswer
 

j'ai besoin de faire un tableau à 3 dimensions qui contiendra des pointeurs, et peu importe les perfs, je peux utiliser un vector de vector de vector ????

mood
Publicité
Posté le   profilanswer
 


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

  A propos des pointeurs.[Débutant]

 

Sujets relatifs
[Débutant] Requête Sql[Debutant] Construire une requete
Problème shell d'un débutant HELP!opengl, conseil a propos d un projet
pb while dans tableau - DébutantQuel language est le plus simple d'apprentissage pour un debutant ???
[Débutant Delphi 7] évaluation de programme[Débutant] ecriture dans un fichier log
Toujours constructeur, pointeurs, agrégationdebutant aide script SCP SFTP
Plus de sujets relatifs à : A propos des pointeurs.[Débutant]


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