Lecture incorrecte d'une valeur

Bonjour, ci dessus une partie de mon programme, mon programme marche quand je fais
   printf("donnez la valeur à insérer \n");
    scanf("%d",&V);
     printf("donnez la position \n");
    scanf("%d",&pos);

avant
creer_liste_bi(&tete,N);

mais ne marche pas quand je fais le contraire.
c'est très bizarre et je n'arrive pas a trouver une explication logique
PS: je n'arrive pas a trouver un bon titre a mon poste vu que je ne connais le problème veuillez m'excuser et m'en proposer un S.V.P
void creer_liste_bi(maillon **tete,int N)
{   int i;
    maillon *P,*Q;
    *tete=NULL;
    for(i=0;i<N;i++)
    {
        P=allouer();
        printf("donnez la val\n");
        scanf("%d",&(P->val));
        if(*tete==NULL)
            *tete=P;
        else
        {
           aff_adr_D(Q,P);
           aff_adr_G(P,Q);
        }
        Q=P;
    }
    aff_adr_G(tete,NULL);
    aff_adr_D(P,NULL);
}
int main()
{   int N,pos,V;
    maillon *P,*tete;
    printf("donnez la longueur de la liste\n");
    scanf("%d",&N);
    printf("donnez la valeur a inserer \n");
    scanf("%d",&V);
     printf("donnez la position \n");
    scanf("%d",&pos);
    creer_liste_bi(&tete,N);
    printf("voici la position %d \n",pos);
    printf("voici la valeur %d\n",V);
    inserer_pos(&tete,V,pos,N);
    P=tete;
    while(P!=NULL)
    {
        printf("%d",valeur(P));
        P=suivant(P);
    }
    return 0;
}


Configuration: Windows / Chrome 73.0.3683.103

2 réponses

  • Votes
  • Date
  • Date décroissante
  1. voila ce qui se passe exactement
    il me dit que pos=0 ce qui n'est pas le cas
    et insère ma valeur en deuxième position (c'est toujours comme ça
    quelque soit la valeur de pos)
    1. Bonjour,

      On est ici dans un cas de corruption de mémoire.
      Je n'ai pas vu le code de
      aff_adr_G()
      mais ligne 19 j'écrirais plutôt
      aff_adr_G(*tete,NULL);
      .
      1. Contributeur
        Sur la capture on voit d'ailleurs un warning du compilateur, qui se plaint que le premier argument passé à
        aff_adr_G()
        a un type pointeur incompatible avec le prototype définit pour cette fonction.