Partage
  • Partager sur Facebook
  • Partager sur Twitter

Detecter un pointeur valide

comment fait on?

Sujet résolu
    9 mars 2008 à 10:27:16

    Bonjour a tous,

    je vous expose mon problème en 2 mots :
    je voudrais savoir si il y a moyen de tester la validité d'un pointeur, avant qu'il ne fasse planter le programme.


    exemple sommaire de ce que je veux faire :
    1. SDL_Surface *pointeur1, *pointeur2;
    2. /* ... */
    3. pointeur1 = /* ce pointeur pointe sur une image SDL_Surface */;
    4. pointeur2 = pointeur1;
    5. /*....*/
    6. SDL_freeSurface (pointeur1); /* Donc là, la je supprime l'image du pointeur1*/
    7. /*Comme le pointeur1 n'est pas égal à NULL donc je le met par la suite a NULL pou éviter tout plantage */
    8. /* Sauf que j'ai aussi le pointeur2 qui pointe sur cette image effacée, et il n'est pas à NULL lui, il contient toujours l'adresse de cette ex-image */


    Et c'est là que j'aimerais vérifier si l'adresse du pointeur2 est toujours valide ou pas (avant le plantage bien entendu :D .

    Y a t'il un moyen de savoir sa?


    • Partager sur Facebook
    • Partager sur Twitter
      9 mars 2008 à 11:51:14

      Citation : Joystic9

      Et c'est là que j'aimerais vérifier si l'adresse du pointeur2 est toujours valide ou pas (avant le plantage bien entendu :D .

      Y a t'il un moyen de savoir sa?


      'Naturellement', non. Par contre, la règle d'usage est qu'un pointeur contient soit une adresse valide, soit NULL (invalide). Il devient ensuite facile de tester NULL.

      Evidemment, si cette règle n'est pas respectée, c'est le cirque... Respecter cette règle nécessite une attention de tous les instants quand on écrit du code. Se méfier tout particulièrement de pointeurs 'aliased' (2 ou plus pointeurs sur la même adresse).

      Dans le cadre de la programmation dite 'défensive' (objectif 0 bug par construction), une politique drastique de réduction de la portée des objets au strict minimum (même si il faut multiplier les blocs, ce qui est sans incidence sur le code produit), et une stratégie efficace et reconnue. Evidemment, elle n'est expliquée dans aucun livre, pas la peine de chercher des références...

      http://mapage.noos.fr/emdel/notes.htm#pointeurs
      http://mapage.noos.fr/emdel/notes.htm#portee
      • Partager sur Facebook
      • Partager sur Twitter
      Music only !
        9 mars 2008 à 14:10:45

        Merci ED pour ta réponse,

        Il va donc falloir que je repense mon projet autrement pour éviter d'écrire pointeur1 = pointeur2, mais pour le moment c'est la seule façon que j'ai trouvé.

        La seule parade que j'ai trouvé c'est de vérifier si pointeur1 = pointeur2 alors je met les 2 à null.
        Parce que vous l'aurez compris que le pointeur2 peut être égal aussi à autre chose dans mon code ....

        Je nages en plein pointeur ces temps-ci et avec sa j'agrémente de structures passé en pointeur à des fonctions. Je ne vous dit pas les plantages de fous que sa m'appporte, si j'ai des mauvaises réceptions....

        bonne journée
        • Partager sur Facebook
        • Partager sur Twitter
          9 mars 2008 à 14:25:32

          Citation : Joystic9

          Je nages en plein pointeur ces temps-ci et avec sa j'agrémente de structures passé en pointeur à des fonctions. Je ne vous dit pas les plantages de fous que sa m'appporte, si j'ai des mauvaises réceptions....


          Les risques que tout explose sont immenses, mais si on code avec rigueur et maitrise, il n'y a aucun problème. Le C, c'est pas un langage de débutants... Il fourni tous les moyens possibles de se tirer une balle dans le pied.

          L'écriture de C solide repose sur :

          - Une bonne étude préalable de ce qu'on a à coder (spécifications, conception)
          - Une parfaite connaissance du langage, de ses limites et de ce qui n'est pas défini.
          - L'usage massif de la programmation défensive (amont) et des tests unitaires (aval).

          A part ça, il est bien sûr techniquement possible de bricoler...

          • Partager sur Facebook
          • Partager sur Twitter
          Music only !

          Detecter un pointeur valide

          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
          • Editeur
          • Markdown