[C] - Tableaux de pointeurs et liste chainees (ENCORE UN PROB)

- Tableaux de pointeurs et liste chainees (ENCORE UN PROB) [C] - Programmation

Marsh Posté le 23-06-2002 à 18:32:21    

Voici mon code, j'ai mis un commentaire ou se trouve l'erreur, il dit acces violation at adress machin
et je ne comprend pas pq!! Tout ce que je veux faire c copier l'adresse pointee deja enregistrée dans un tableau de pointeurs TabPtr dans pCourant et il me dit que c pas bon, pourtant je n'ai pas fait de free() ni rien  
je pige po, si qqun a le courage de matter mon code ca serait cool tkx
 
 

Code :
  1. #include <stdio.h>
  2. #include <conio.h>
  3. #include <string.h>
  4. #include <malloc.h>
  5. int i=0, NbList=0;
  6. char InputNom[25];
  7. char InputInsNom[25];
  8. char QueFaire;
  9. struct etudiants
  10. {
  11.    char nom[25];
  12.    etudiants * pSuivant;
  13.    etudiants * pPrecedant;
  14.    } *pCourant, *pFree;
  15. etudiants * TabPtr[15];
  16. void main()
  17. {
  18. while(strcmp("fin",InputNom)!=0)
  19. {
  20.    printf("Liste n°%d :\n\n",i+1);
  21. pCourant=(etudiants*)malloc(sizeof(struct etudiants));
  22. pCourant->pSuivant=NULL;
  23.    pCourant->pPrecedant=NULL;
  24.    /* Enregistrement de l'adresse de la liste chainee das le tableau de pointeur */
  25.    TabPtr[i]=pCourant;
  26. while(strcmp("finliste",InputNom)!=0 && strcmp("fin",InputNom)!=0)
  27.  {
  28.    scanf("%s",InputNom);
  29.       if(strcmp("finliste",InputNom)!=0 && strcmp("fin",InputNom)!=0)
  30.        {
  31.     /* Enregistrement dans la liste chainee */
  32.     strcpy(pCourant->nom,InputNom);
  33.     pCourant->pSuivant=(etudiants*)malloc(sizeof(struct etudiants));
  34.          pCourant->pSuivant->pPrecedant=pCourant;
  35.     pCourant=pCourant->pSuivant;
  36.     pCourant->pSuivant=NULL;
  37.          }
  38.    }
  39. i=i+1;
  40.    if(strcmp("fin",InputNom)!=0) strcpy(InputNom,"lol" );
  41.    }
  42. clrscr();
  43. printf("\n\nFin de programme! Appuyez sur une touche pour afficher les liste entree...\n\n" );
  44. getch();
  45. NbList=i;
  46. i=0;
  47. while(i!=NbList)
  48. {
  49.    printf("\n\nListe n°%d sur %d :\n",i+1,NbList);
  50.    pCourant=TabPtr[i];
  51. while(pCourant->pSuivant!=NULL)
  52.  {
  53.    printf("\n- %s",pCourant->nom);
  54.       pFree=pCourant;
  55.    pCourant=pCourant->pSuivant;
  56.       // free(pFree);
  57.    }
  58.    i=i+1;
  59.    }
  60. printf("Que voulez vous faire maintenant? q=Quitter i=inserer un enregistrement s=supprimer un enregistrement. " );
  61. QueFaire=getch();
  62. switch(QueFaire)
  63. {
  64.    case 'q': break;
  65.    case 'i': {
  66. printf("Quel numéro de liste?" );
  67.    scanf("%d",i);
  68.    pCourant=TabPtr[i-1];  /********* ICI ERREUR INCOMPREHENSIBLE ***********/
  69. printf("Apres quel elements? Si l'element n'existe pas l'enregistrement sera ajouté a la fin." );
  70.    scanf("%s",InputInsNom);
  71.    while(pCourant->pSuivant!=NULL && strcmp(pCourant->nom,InputInsNom)!=0)
  72.     {
  73.       pCourant=pCourant->pSuivant;
  74.       }
  75.    if(pCourant->pSuivant==NULL)
  76.     {
  77.       pCourant->pSuivant=(etudiants*)malloc(sizeof(struct etudiants));
  78.       pCourant->pSuivant->pPrecedant=pCourant;
  79.       pCourant=pCourant->pSuivant;
  80.       pCourant->pSuivant=NULL;
  81.       strcpy(pCourant->nom,InputInsNom);
  82.       pCourant->pPrecedant->pSuivant=pCourant;
  83.       printf("\nelement inséré: %s\nElement precedant: %s",pCourant->nom, pCourant->pPrecedant);
  84.       }
  85.    }
  86.    break;
  87.    }
  88. getch();
  89. }


Message édité par SquiiiD le 23-06-2002 à 18:33:30
Reply

Marsh Posté le 23-06-2002 à 18:32:21   

Reply

Marsh Posté le 23-06-2002 à 18:58:26    

scanf c'est &i qu'il faut lui filer!

Reply

Marsh Posté le 23-06-2002 à 19:11:58    

ha mais oui !!!!!!!!!!!!!!!!!!!!!!!!!!
la bete erreur que j'ai faite  :D  
merci !!!

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed