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

  FORUM HardWare.fr
  Programmation
  C++

  toujours initialiser un pointeur ?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

toujours initialiser un pointeur ?

n°2066408
razuki
Posté le 27-03-2011 à 21:27:24  profilanswer
 

Bonjour,
j'aimerais savoir si on doit initialiser un pointeur lors de sa déclaration. En effet, quand je compile, j'ai un message de warning tel que :

Code :
  1. warning: ‘pub_key_buf’ may be used uninitialized in this function


 
Et le code ressemble a ceci :

Code :
  1. unsigned char *pub_key_buf ;
  2. length = BN_bn2bin(const_pub_key, pub_key_buf);


 
Est ce que je devrais faire un:

Code :
  1. unsigned char *pub_key_buf = NULL;


 
Quel est l'inconvénient ? est ce une bonne manière ?
merci d'avance.

mood
Publicité
Posté le 27-03-2011 à 21:27:24  profilanswer
 

n°2066437
WiiDS
20 titres en GC, 0 abandon, 0 DQ
Posté le 28-03-2011 à 02:49:08  profilanswer
 

Je sais pas s'il y a une solution universelle, mais par principe je te dirais de toujours initialiser tes variables ou tes pointeurs. Même si ton compilateur venait à être assez sympa pour mettre tous tes pointeurs à NULL par défaut, rien ne dit qu'un autre compilo en ferait de même.
 
La tu fais passer un pointeur qui a potentiellement une adresse aléatoire. Et en plus je vois pas trop l'intérêt de lui passer ça en paramètre du coup, puisque:
 
1) Elle pointe vers NULL au mieux, vers une adresse aléatoire au pire
2) Elle ne pointe donc pas vers un contenu "utile"
3) Tu ne peux pas modifier l'adresse pointée par le pointeur vu que tu fais passer une copie de ce pointeur, il faudrait utiliser le "&" (et donc passer par un double pointeur) pour ce faire.
 
A moins que j'ai raté quelque chose, ton code me paraît donc étrange [:transparency]


---------------
"I can cry like Roger. It's just a shame I can't play like him" - Andy Murray, 2010
n°2066455
shaoyin
Posté le 28-03-2011 à 09:49:52  profilanswer
 

@ WiiDS : pas tout à fait d'accord pour le 3). Je ne connais pas le prototype de la fonction BN_bn2bin, mais si elle prend le pointeur par référence (on est en C++), et non par adresse, elle peut tout à fait en changer le contenu.
 
@razuki : Le compilateur ne fait que t'avertir qu'il y a un risque d'erreur si tu n'initialises pas ta variable. C'est en tout cas toujours plus propre de le faire.

n°2066516
breizhbugs
Posté le 28-03-2011 à 12:24:50  profilanswer
 

Moi je pense que dans l'exemple, cela dépend de la documentation de BN_bn2bin(): s'il requiert un pointeur, est ce sur une zone allouée ou pas? Est ce une variable d'entrée (une chaine de caractère pouvant être NULL)? une variable de sortie(qui va allouée la zone mémoire)?...


---------------
Seul Google le sait...
n°2066567
razuki
Posté le 28-03-2011 à 14:38:25  profilanswer
 

breizhbugs a écrit :

Moi je pense que dans l'exemple, cela dépend de la documentation de BN_bn2bin(): s'il requiert un pointeur, est ce sur une zone allouée ou pas? Est ce une variable d'entrée (une chaine de caractère pouvant être NULL)? une variable de sortie(qui va allouée la zone mémoire)?...


 
En effet, j'avais pas bien compris ce que raconte la doc sur BN_bn2bin( ). Ceci marche très bien:
 

Code :
  1. int size = BN_num_bytes(const_pub_key);
  2. unsigned char* pub_key_buff = new unsigned char[size];
  3. length = BN_bn2bin(const_pub_key, pub_key_buf);
  4. // ...
  5. delete[] pub_key_buff;

n°2066581
theshockwa​ve
I work at a firm named Koslow
Posté le 28-03-2011 à 15:45:26  profilanswer
 

il me semble que le warning ne doit pas apparaitre si la fonction prend une référence non const sur le pointeur ... à confirmer.


---------------
last.fm

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

  toujours initialiser un pointeur ?

 

Sujets relatifs
Probleme File sans pointeurRenvoi d'un pointeur sur une variable automatique
[resolu]allocation dynamique double pointeur passer en parametreInitialisation dans une fonction d'une matrice de pointeur
Cast en pointeur pointant vers un pointeur de fonctionPointeur vers bit-field
Probleme avec un pointeurEcrire sur le terminal sans avancer le pointeur
Initialiser des const dans une class, possible?passer un pointeur en parametre sans initialiser avant?
Plus de sujets relatifs à : toujours initialiser un pointeur ?


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