probleme de segmentation

probleme de segmentation - C - Programmation

Marsh Posté le 20-11-2008 à 06:44:00    

Bonjour tout le monde ;-) je suis nouvelle dans le forum, je cherche desesperment à corriger mon code.
j'essaie créer une fonction qui charge un tableau de structure. Ma structure comprend une chaine de caractères et un entier qui incrémente le nombre d'occurrence de ce mot dans l tableau s'il y existe, sinon ce mot sera sauvegardé dans une nouvelle case du tableau. Mon tableau est statique de taille NMAX.

Code :
  1. #include<stdio.h>
  2. #include<string.h>
  3. #include<stdlib.h>
  4. int itmc=0;
  5. struct motcle{
  6. int occ;
  7. char *mot;
  8. };typedef struct motcle MOTCLE;
  9. void charger_mot_cle(MOTCLE t[],char *s)
  10. { int i;
  11.   for(i=0;i<itmc;i++)
  12.    {
  13.      if(!(strcmp(t[i].mot,s))) (t[i].occ)++;
  14.      break;
  15.    }
  16.   strcpy(t[itmc].mot,s);
  17.   itmc++;
  18.      }
  19. int main(void)
  20. {
  21. MOTCLE mc[200];
  22. charger_mot_cle(mc,"if" );
  23. getch();
  24. }


en utilisant le debug de dev cpp j'ai le mesage d'erreur suivant
un violation d'accès(erreur de segmentation) est apparue dans votre programme ???  
je suis perdu
 merci de bien vouloir m'aider à résoudre ce problème.

Reply

Marsh Posté le 20-11-2008 à 06:44:00   

Reply

Marsh Posté le 20-11-2008 à 07:31:27    

Salut,
 
Une chose vue "vite fait":
 
-Tu declares un tableau de structures mc
-Tu passes en argument ce tableau mais....
-Ce que recoit la fonction charger_mot_cle() est une copie de mc[]
-Dans cette copie, dans chaques structure tu as une copie de occ et une copie de pointeur.... sauf que un pointeur etant une adresse, ce sont les "vraies" valeurs" au bout.
=> Le compilo doit pas aimer ça effectivement.
 
Je suis pas spécialiste de la question mais à ta place je passerai en argument à charger_mot_cle() l'adresse de mc: &mc
 
Ce qui changerait le prototype en void charger_mot_cle(MOTCLE * t ,char *s);
 
edit: de plus je sais pas si tu peux passer en paramêtre comme ca l'adresse d'une chaine de caractères. Ou alors je savais pas le C aussi permissif.
Imo, tu dois declarer au prealable un tableau de char et là tu pourras passer l'adresse. C'est au minimum "plus propre".

Message cité 1 fois
Message édité par h0taru le 20-11-2008 à 07:38:06
Reply

Marsh Posté le 20-11-2008 à 07:59:29    

c'est surtout qu'il faudrait peu etre ALLOUER le pointeur mot ...
 
ET heureusement que tu peut passer l'adresse d'une chaine de caractere en parametres ...

Reply

Marsh Posté le 20-11-2008 à 08:00:36    


 
[:quardelitre]


Message édité par Elmoricq le 20-11-2008 à 08:00:59
Reply

Marsh Posté le 20-11-2008 à 11:16:40    

oui je trouve aussi [:pingouino]

Reply

Marsh Posté le 20-11-2008 à 18:32:12    

Joel F a écrit :

oui je trouve aussi [:pingouino]


 
Bah.
C'est pas comme si ton avis m'importait.
 

Reply

Sujets relatifs:

Leave a Replay

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