toujours initialiser un pointeur ?

toujours initialiser un pointeur ? - C++ - Programmation

Marsh Posté le 27-03-2011 à 21:27:24    

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.

Reply

Marsh Posté le 27-03-2011 à 21:27:24   

Reply

Marsh Posté le 28-03-2011 à 02:49:08    

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
Reply

Marsh Posté le 28-03-2011 à 09:49:52    

@ 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.

Reply

Marsh Posté le 28-03-2011 à 12:24:50    

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...
Reply

Marsh Posté le 28-03-2011 à 14:38:25    

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;

Reply

Marsh Posté le 28-03-2011 à 15:45:26    

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
Reply

Sujets relatifs:

Leave a Replay

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