initialisation d'un tableau de pointeur

initialisation d'un tableau de pointeur - C - Programmation

Marsh Posté le 25-08-2009 à 13:40:06    

Bonjour,
 
Pour me présenté :
Newbies, windows XP, IDE dev c++, programme en c client serveur.
 
voila mon code :

Code :
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #define NombreClient 5
  4. void main (void){
  5.    int* Trame[NombreClient];
  6.    FILE* FichierVideo = NULL;
  7. ...
  8. blablabla
  9. }


 
bon j'ai vu qu'il falait toujours initialisé un pointeur à NULL.
mais dans le cas d'un Tableau de pointeur comment fait-on?

 
j'explique mon code/intention vite fait:  
je souhaite lire un fichier a différent endroit selon le client, et le caractere lu par le client dans une trame qui lui sera envoyée.
ces pointeurs de lecture sont donc les pointeurs contenus dans chaque case du tableau Trame[].
 
si je ne suis pas assez precis, n'hesitez pas à me demander plus d'informaion.
 


---------------
De tous ceux qui n'ont rien à dire, les plus agréables sont ceux qui se taisent.
Reply

Marsh Posté le 25-08-2009 à 13:40:06   

Reply

Marsh Posté le 25-08-2009 à 15:42:17    

Citation :

qu'il falait toujours initialisé un pointeur à NULL.


 
pas toujours, ça dépend de son utilisation. Disons que c'est moins risqué et plus déterministe, mais si tu est sûr de donner une bonne valeur à ton pointeur avant utilisation, pas de problème à ne pas l'initialiser. Si c'était obligatoire, le langage s'en chargerait, comme en Java. Idem pour mettre à NULL après libération, c'est souvent inutile.
 
Le nombre de fois que je vois ça :
 

Code :
  1. Toto::~Toto()
  2. {
  3.     delete m_p;
  4.     m_p = NULL; // inutile puisque l'objet, donc ses membres dont m_p, va disparaître.
  5. }


 
Dans ton cas, si tu veux vraiment mettre les pointeurs à NULL, tu peux faire :

Code :
  1. memset( Trame, NULL, sizeof Trame ); // syntaxe à la C, connue
  2. std::fill_n( Trame, NombreClient, NULL ); // syntaxe à la C++, moins connue mais + propre

Reply

Marsh Posté le 25-08-2009 à 15:42:52    

Pareil que pour initialiser un tableau normal.

Reply

Marsh Posté le 25-08-2009 à 15:43:29    

jesus_christ a écrit :

Citation :

qu'il falait toujours initialisé un pointeur à NULL.

 

pas toujours, ça dépend de son utilisation. Disons que c'est moins risqué et plus déterministe, mais si tu est sûr de donner une bonne valeur à ton pointeur avant utilisation, pas de problème à ne pas l'initialiser. Si c'était obligatoire, le langage s'en chargerait, comme en Java. Idem pour mettre à NULL après libération, c'est souvent inutile.

 

Le nombre de fois que je vois ça :

 
Code :
  1. Toto::~Toto()
  2. {
  3.     delete m_p;
  4.     m_p = NULL; // inutile puisque l'objet, donc ses membres dont m_p, va disparaître.
  5. }
 

Dans ton cas, si tu veux vraiment mettre les pointeurs à NULL, tu peux faire :

Code :
  1. memset( Trame, NULL, sizeof Trame ); // syntaxe à la C, connue
  2. std::fill_n( Trame, NombreClient, NULL ); // syntaxe à la C++, moins connue mais + propre


 

1) on parle C
2) useless memset/fill_n of the week.


Message édité par Taz le 25-08-2009 à 15:43:51
Reply

Marsh Posté le 25-08-2009 à 15:46:59    

1) merde je me croyais dans la section C++
2) ... = { 0 }; ça marche en C ça ? Je dirais oui pour un POD en C++, un tableau en C je suis pas sûr.

Reply

Marsh Posté le 25-08-2009 à 15:51:46    

merci de répondre mais...
heuu, donc c'est quoi la réponse à ma question au final? :)

Reply

Marsh Posté le 25-08-2009 à 15:57:26    

Un tout simple = { }

Reply

Marsh Posté le 25-08-2009 à 16:25:14    

merci,
 
donc si je fais un :
int* Trame[NombreClient] = { };
ça marchera? tout les NombreClient pointeurs de mon tableau seront initialisés?

Reply

Marsh Posté le 25-08-2009 à 16:57:18    

ah ben j'ai appris un truc...
Ca marche aussi pour les tableaux non statiques, et c'est concrètement supporté par les compilos ? Ca me semble à la fois légal et obscur comme syntaxe.

Reply

Marsh Posté le 25-08-2009 à 17:08:07    

effectivement cela semble fonctionner.
merci :)
Resolu! (enfin on ne creusera pas pour savoir pourquoi ça marche)

Reply

Marsh Posté le 25-08-2009 à 17:08:07   

Reply

Marsh Posté le 25-08-2009 à 17:39:15    

ProGrammeHeure a écrit :

effectivement cela semble fonctionner.
merci :)
Resolu! (enfin on ne creusera pas pour savoir pourquoi ça marche)


Bah, c'est pas compliqué : les { } sont la syntaxe pour initialiser un tableau. Le C s'attends à des valeurs sépararées par des virgules et s'il manque des valeurs, il y aura un 0 à la place. Ça marche aussi pour les structures d'ailleurs.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed