s
19 708 Pages

un pointeur ballants, ou pointeur se penchant, en langages de programmation, Il indique un pointeur qui fait référence à la zone de mémoire ne sont plus valables, car il a déjà été libéré ou parce que le pointeur est utilisé en dehors du contexte de l'existence de la variable à laquelle il se rapporte. Parce que le système d'exploitation peut réallouer et réutiliser cet emplacement mémoire de la date, l'utilisation d'un pointeur ballants apporte des effets imprévisibles, allant de 'erreur de segmentation (Systèmes * NIX) ou erreur de protection générale (systèmes Windows), aboutissant à l'arrêt de l'application qui a causé l'erreur, la corruption de données en mémoire.[1]

Certaines causes de pointeur ballants

Dans les langages de programmation tels que C, qui stipulent que tant le programmeur pour faire face à la libération de la mémoire allouée dynamiquement, des pointeurs, comme toutes les autres variables, continuer à tenir la dernière valeur qui leur a été attribué, même si cette valeur n'est plus valide. Lorsque, par exemple, est libéré la mémoire pointée par un pointeur, il est plus possible de l'utiliser sans réaffecter à une autre zone de mémoire.

Un exemple est illustré ci-dessous:

int *la = (int *) malloc(sizeof(int));
/ * ... * /
gratuit(la);
*la = 200;  / * A ce stade, la valeur contenue dans le ne fait plus référence
            * Un espace de stockage valide!
            * /

Une autre cause de pointeur qui pend, comme mentionné précédemment, peut être l'utilisation d'un pointeur qui fait référence à une variable en dehors du contexte de l'existence (ou champ) de ce dernier.

Par exemple:

int *la = NULL;
{
int suite = 3;
la = suite;
/ * ... * /
*la = 2;    / * Equivalent à écrire cont = 2; * /
}
*la = 200;  / * Compte à ce stade, il n'y a plus une variable valide,
              * Donc plus il fait référence à une zone de mémoire valide!
              * /

Un dernier exemple montre une autre erreur (en fait très similaire à la précédente) qui, souvent, en raison de problèmes de pointeurs en cours, à savoir le retour à la fin d'une fonction, l'adresse d'une variable locale, ne sont plus valables en dehors de la même fonction:

int *ritornaUnInt()
{
int suite = 3;
retour suite;  / * Pointeur de compte est pas valide en dehors de cette fonction! * /
}

[2]

notes

  1. ^ Harvey M. Deitel, Paul J. Deitel, C ++. Principes de programmation, Apogée, 2005.
  2. ^ Paul Saints, fondamentaux de la programmation en C: Pointeurs, wwwold.iit.cnr.it, 22 décembre 2014. récupéré 12:45.