IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C Discussion :

Problème avec boucle for


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Novembre 2008
    Messages
    106
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 106
    Par défaut Problème avec boucle for
    bonjour,

    Quelqu'un pourrait m'expliquer cette boucle qui contient un super pointeur svp?
    car lorsque je désalloue un chainon via la fonction oteN, le compilateur me mets un message d'erreur à la fin du programme.

    "Exception non gérée à 0x003514f7 dans SKI.exe*: 0xC0000005: Violation d'accès lors de la lecture de l'emplacement 0x00000014."

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    for ( ; (*spN); spN=&(*spN)->psN)
    	{
    		if ((*spN)->nbi==0)
    		{
    			oteN(spN);
    		}
    		else
    		{
    			printf ("%-50s : %d inscrits\n", (*spN)->nat, (*spN)->nbi);
    		}
     	}
    }
    	void oteN(NAT **spN)
    	{
    		NAT *n;
    		n = *spN;
    		(*spN)=n->psN;
    		free (n->nat);
    		free (n);
    	}

  2. #2
    Invité(e)
    Invité(e)
    Par défaut
    Bonjour,

    Tu passes au chainon suivant de deux manières différentes dans ton code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    for (; (*spN); spN = &(*spN)->psN)
      {
        if ((*spN)->nbi == 0)
          {
            oteN (spN);
          }
        else
          {
            printf ("%-50s : %d inscrits\n", (*spN)->nat, (*spN)->nbi);
          }
      }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    void oteN (NAT ** spN)
    {
      NAT *n;
      n = *spN;
      /* manque un & ici */
      (*spN) = n->psN;
      free (n->nat);
      free (n);
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    void oteN (NAT ** spN)
    {
      NAT *n;
      n = *spN;
      (*spN) = &n->psN;
      free (n->nat);
      free (n);
    }
    Cela dit, si tu passes au chainon suivant à la fois dans l'instruction for et dans la fonction oteN, tu risques d'avoir des surprises...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    for (; (*spN); )
      {
        if ((*spN)->nbi == 0)
          {
            oteN (spN);
            /* oteN est passé au chainon suivant */
          }
        else
          {
            printf ("%-50s : %d inscrits\n", (*spN)->nat, (*spN)->nbi);
            /* on passe au chainon suivant */
            spN = &(*spN)->psN;
          }
      }

Discussions similaires

  1. Problème avec boucle for/loop.
    Par Reivilo35 dans le forum PL/SQL
    Réponses: 4
    Dernier message: 11/01/2011, 09h01
  2. Problème avec boucle for
    Par GLDRX dans le forum LabVIEW
    Réponses: 1
    Dernier message: 14/06/2010, 21h43
  3. [batch] problème avec boucle for
    Par TanEk dans le forum Scripts/Batch
    Réponses: 2
    Dernier message: 22/04/2008, 14h41
  4. Problème avec boucle for() et action POST
    Par Oli_Ifre dans le forum Langage
    Réponses: 4
    Dernier message: 26/04/2007, 09h52
  5. [ActionScript] Problème avec boucle 'FOR'
    Par BnA dans le forum Flash
    Réponses: 7
    Dernier message: 02/11/2006, 09h26

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo