Bonjour,
Je voulais savoir si l'on pouvait se dispenser d'initialiser un pointeur si plus tard dans le programme on fait un malloc de ce pointeur et que jusqu'a ce malloc on ne se sert pas du pointeur en question?
merci
Bonjour,
Je voulais savoir si l'on pouvait se dispenser d'initialiser un pointeur si plus tard dans le programme on fait un malloc de ce pointeur et que jusqu'a ce malloc on ne se sert pas du pointeur en question?
merci
Tu peux, rien ne t'empeche. Cependant, si on conseille d'initialiser les pointeurs, c'est pour éviter un comportement dangereux et permettre un debuggage plus facile.
Imagine que tu n'as pas initialiser ton pointeur a null, et tu passes ton programme a quelqu'un...lui il a pas trop suivi ce que t'as fait et il tente d'utiliser ton pointeur avant le malloc : tu vas te retrouver avec un programme au comportement indéfini qui pourrait écrire des données a de mauvaises adresses etc...Bref, un truc faux et pas évident a débugger. Au moins en initialisant ton pointeur a null tu ne risque pas d'écrire à un mauvais emplacement et en cas d'utilisation du pointeur, le programme plantera net à chaque fois (au lieu d'avoir un comportement flou)
Oui, et surtout, tu peux le détecter avec un if (p != NULL)Envoyé par Ksempac
Salut,
Théoriquement, rien ne t'empêche de déclarer un pointeur sans l'initialiser dans la foulée...
Cependant, il faut bien comprendre que, quand tu déclare une variable, meme si, comme pour un pointeur, elle va contenir une adresse mémoire, sa valeur avant d'être initialisée est... tout et n'importe quoi...
Pour etre précis, la valeur est... ce qui s'est trouvé à l'adresse utilisée par la mémoire la dernière fois qu'elle a été utilisée (ca peut etre des valeurs qui étaient utilisées par une application qui a été fermée depuis des heures... voir des jours)
Il s'en suit que, tant que tu n'es pas sur que l'adresse que la variable contient est belle et bien valide, le fait d'essayer d'accéder à cette adresse va provoquer des catastrophes pouvant aller jusqu'au crash système dans les cas les plus graves...
C'est la raison pour laquelle il est très fortement conseillé d'initialiser les pointeurs à NULL (car, au moins, c'est une valeur facilement testable) tant qu'ils ne prennent pas une adresse valide, et de systématiquement vérifier les valeurs des pointeurs avant d'essayer d'y accéder et/ou apres une fonction d'allocation![]()
A méditer: La solution la plus simple est toujours la moins compliquée
Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
Compiler Gcc sous windows avec MinGW
Coder efficacement en C++ : dans les bacs le 17 février 2014
mon tout nouveau blog
et de remettre à NULL après libération de la ressource pointée...Envoyé par koala01
Envoyé par Emmanuel Delahaye
oui... évidemment... sinon le reste n'a aucun sens
![]()
A méditer: La solution la plus simple est toujours la moins compliquée
Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
Compiler Gcc sous windows avec MinGW
Coder efficacement en C++ : dans les bacs le 17 février 2014
mon tout nouveau blog
C'est techniquement possible mais formellement déconseillé.Envoyé par sone47
ou mieux (ce n'est pas toujours possible)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 T *p = NULL; p = malloc (...);
Nota. On ne fait pas un "malloc de ce pointeur", mais "on alloue un bloc avec malloc(), dont on stocke l'adresse dans ce pointeur".
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 T *p = malloc (...);
Attention à utiliser la bonne terminologie, sinon, tu donnes l'impression de ne pas maitriser ton sujet...
Partager