next up previous contents index
Next: L'opération & Up: No Title Previous: Pointeurs

Segmentation fault

   

Que l'expression *E soit correctement typée ne garantit absolument pas qu'elle désigne un objet, autrement dit qu'elle pointe vers quelque chose ou réfère à quelque chose. L'expression arithmétique 1/(1-1) est aussi correctement typée, mais provoquera aussi une erreur à l'exécution.

  Le cas le plus usuel est celui où E est simplement une variable p de type pointeur de t ; c'est seulement quand p a été initialisée à une valeur non-nulle, que l'on peut dire que p << pointe >>, et donc que l'on peut utiliser *p en tant que variable de type t. Un pointeur initialisé à 0 ne pointe sur rien. D'où l'importance de l'initialisation pour les pointeurs.

La figure gif représente symboliquement un pointeur qui ne pointe vers rien, et un pointeur qui pointe. Seul ce dernier peut être déréférencé.

   figure1841
Figure: Pointeurs

Tout programmeur C aura obtenu comme résultat de l'exécution d'un programme un << Segmentation fault >> inattendu. Cela est généralement dû à la déréférenciation d'un pointeur non-initialisé :

  int *p;
  *p = 4;

Il y a dans ce cas tentative d'affecter une valeur à une variable, *p, qui n'existe pas. On obtiendrait la même erreur si l'on tentait de lire *p dans les mêmes conditions.



Rene Lalement
Mon Sep 30 18:22:54 MET 1996