frankie_flowers a écrit :
je viens de m'apercevoir qu'intervertir l'ordre de deux déclarations de pointeurs peut créer des erreurs de segmentation
|
Le problème est ailleurs. Si tu définis des pointeurs sans leur donner une valeur valide, le déréférencement produit un comportement indéfini. C'est un bug de codage.
Citation :
Je crois avoir compris que le problème est qu'aucun emplacement n'est réservé pour stocker la valeur pointée par char** (une adresse).
|
Oui. Le pointeur pointe n'importe où.
Citation :
Est-ce que je suis obligé de faire un malloc() après chaque déclaration de pointeur ?
|
Non. Ce qui est obligatoire, c'est que la valeur du pointeur soit valide au momement où tu l'utilises (ou si tu le passes à une fonction).
Citation :
D'autre part, en prenant un exemple simple, est-ce que
est correct ? ou y'a t-il toujours un risque de seg_fault ?
|
14 ça veut dire quoi ? Tu trouves que ça ressemble à une adresse valide ?
p n'étant pas défini, le comportement est indéfini. C'est un bug. Oui, il y a de risque de seg_fault.
Il y a 4 façons standards d'initialiser un pointeur
- NULL (le pointeur est alors invalide, son déréférencement invoque un comporetement indéfini). Mais c'est une valeur testable
- l'adresse d'une variable du même type
- la valeur retournée par malloc()
- la valeur retournée par fopen() (de type FILE*)
plus les variantes dérivées de ces exemples...
---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/