Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2300 connectés 

  FORUM HardWare.fr
  Programmation
  C

  [C] Bus error, arbre et fichiers

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[C] Bus error, arbre et fichiers

n°1885362
la_dechean​ce
Posté le 17-05-2009 à 12:06:48  profilanswer
 

ola
 
J'ai un probleme avec mon code qui m'emepeche de continuer :/
 

Code :
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <ctype.h>
  4. #include <string.h>
  5. #define jeux_max 500
  6. #define noeud_l sizeof(abr_index)
  7. typedef enum {PC,PS3,XBOX360,WII}SUPPORTS;
  8. typedef enum {FPS,RPG,COURSE,SPORT,STR,ACTION,COMBAT}TYPES;
  9. typedef struct JEUX{
  10.  
  11. char titre[40], nom_editeur[40];
  12. TYPES type;
  13.    SUPPORTS support;
  14.    int annee;
  15. int mode;// si 0, jeux solo, sinon, jeux multijoueur.
  16. int online;//si 0, jouable seulement offline, sinon, online disponible.
  17.    int note;
  18.   }JEUX;
  19. typedef struct abr{
  20. char cle_nom[40];
  21. int index_b;
  22. struct abr *fg, *fd;
  23. }abr_index;
  24. abr_index *ajoutabr(abr_index *it, char name[40]){
  25. abr_index *new;
  26. new->index_b = 0;
  27. if (it == NULL){
  28.  new = (abr_index*)malloc (sizeof(noeud_l));
  29.  strcpy(new->cle_nom,name);
  30.  new->index_b++;
  31.  new->fg = NULL;
  32.  new->fd = NULL;
  33. }
  34. if (strcmp(new->cle_nom,name)<0){
  35.  it->fd = ajoutabr(it->fd, name);
  36. }
  37. else if (strcmp(new->cle_nom,name)>0){
  38.  it->fg = ajoutabr(it->fg, name);
  39. }
  40. return(it);
  41. }
  42. int creation_index (abr_index *ind){
  43. int reg;
  44. JEUX j;
  45. FILE * f_jeux;
  46. abr_index *idxx;
  47. f_jeux = fopen ("jeux.txt","r" );
  48. if (f_jeux == NULL ){
  49.  printf("erreur dans l'ouverture du fichier.\n" );
  50.  exit(-1);
  51. }
  52.   while (!feof(f_jeux)){
  53.   ind = (abr_index*)malloc (sizeof(noeud_l));
  54.   fscanf(f_jeux,"%s,%s,%s,%d,%d,%d,%d,%s\n",j.titre,j.nom_editeur,j.type,&j.annee,&j.note,&j.mode,&j.online,j.support);
  55.   ajoutabr(idxx, j.titre);
  56.   }
  57. fclose (f_jeux);
  58. }
  59. int sauv_index (){
  60. FILE *f_index;
  61. abr_index *temp2;
  62. int longueur,i;
  63. f_index = fopen("index_nom.txt", "w" );
  64. if (!f_index){
  65.  printf("erreur de creation du fichier.\n" );
  66.  exit (-1);
  67. }
  68. temp2 = (abr_index*)malloc (sizeof(noeud_l));
  69. parcour_abr(temp2);
  70. fclose(f_index);
  71. }
  72. int affiche_abr (abr_index *ind){
  73. abr_index *temp;
  74. temp = (abr_index*)malloc (sizeof(noeud_l));
  75. if (temp != NULL){
  76.  printf ("\n%s,%d\n\n", temp->cle_nom,temp->index_b);
  77. }
  78. while (temp->fg != NULL){
  79.  temp = temp->fg ;
  80.  printf ("\n%s,%d\n\n", temp->cle_nom,temp->index_b);
  81.  if (temp->fg == NULL && temp->fd != NULL){
  82.   temp = temp->fd ;
  83.   printf ("\n%s,%d\n\n", temp->cle_nom,temp->index_b);
  84.  }
  85. }
  86. if (temp->fd != NULL){
  87.  temp  = temp->fd;
  88.  printf ("\n%s,%d\n\n", temp->cle_nom,temp->index_b);
  89. }
  90.  parcour_abr(temp);
  91. }
  92. int parcour_abr(abr_index *ind) {
  93.    
  94. if (ind != NULL){
  95.  printf ("%s,%d\n\n", ind->cle_nom,ind->index_b);
  96.  parcour_abr(ind->fg);
  97.  parcour_abr(ind->fd);
  98. }
  99. }
  100. int main(){
  101. abr_index *lol;
  102. creation_index(lol);
  103. affiche_abr(lol);
  104. }


 
En faite pour l'instant je voudrais juste que en executant ca, le programme m'affiche les infos stocker dans l'arbre prise a partir du fichier jeux.txt  
J'ai plusieur probleme en faite deja par raport au mode d'ouverture : que je mette R, r+ ou autre chose, j'ai Bus error. si je met a+ sa m'affiche  
 
,0
 
,0
,0
 
mais bon c'est pas ce que je veux je veux que le fichier soit parcouru et que les info soit stocké dans mon arbre ( qui servira d'index ).
Mes infos sont stocké comme ca dans mon fichier .txt :  
nom,genre,note ....
 
J'ai aussi testé une methode que j'ai trouver sur le net avec gcc pour debugger ( gdb ) et sa m'affiche sa  :  
 

Code :
  1. (gdb) run
  2. Starting program: /Users/Documents/projet
  3. Reading symbols for shared libraries ++. done
  4. Program received signal EXC_BAD_ACCESS, Could not access memory.
  5. Reason: KERN_INVALID_ADDRESS at address: 0x89068bcf
  6. 0x96df7f00 in strcmp ()


 
Je comprend pas trop si jamais vous savez d'ou proviendrai l'erreur sa serait fort aimable...
 
EDIT :  J'ai testé toutes les focntions une par une et aparament c'est bien sur la fonction ajoutabr que sa bloque


Message édité par la_decheance le 17-05-2009 à 15:29:47
mood
Publicité
Posté le 17-05-2009 à 12:06:48  profilanswer
 

n°1885413
Mxtrem
Posté le 17-05-2009 à 17:40:05  profilanswer
 

Fais un memset(new->cle_nom, 0, 40);

n°1885418
la_dechean​ce
Posté le 17-05-2009 à 18:08:32  profilanswer
 

je ne connaissait pas, je ne trouve pas ou il faut le placer??

n°1885419
Olivier51
Posté le 17-05-2009 à 18:14:02  profilanswer
 

Je dirais plutot dans creation_index(), initialise ta variable locale :
abr_index *idxx = NULL;

n°1885421
la_dechean​ce
Posté le 17-05-2009 à 18:39:35  profilanswer
 

ah, pu de bus error, mais en faite s'a maffiche toujours  
 
,0
,0
 
,0  
 
J'avais enlevé idxx et je travailler directement sur la valeur declaré en arguments..
je vais voir avec sa maintenant pourquoi il m'affiche que des zeros

n°1885422
Olivier51
Posté le 17-05-2009 à 18:58:16  profilanswer
 

Ca ne t'affiche que des zeros parce que tu oublies de passer en arguments de ajoutabr() ces valeurs ...
 
Remplace :
abr_index *ajoutabr(abr_index *it, char name[40])
par
abr_index *ajoutabr(abr_index *it, JEUX* jeux)
 
... plus l'implémentation qui va avec.

n°1885423
la_dechean​ce
Posté le 17-05-2009 à 19:06:09  profilanswer
 

En faite j'utiliser name en locale qui serait en faite le titre d'un jeu...
je vais essayer donc en changeant ca..

n°1885424
gilou
Modérateur
Modzilla
Posté le 17-05-2009 à 19:10:28  profilanswer
 

Vu cette ligne:
#define noeud_l sizeof(abr_index)
celle ci est fausse:
ind = (abr_index*)malloc (sizeof(noeud_l));
et ce devrait être:
ind = (abr_index*)malloc (noeud_l);
 
J'ai pas été voir plus loin, mais quand la première fonction invoquée a un malloc foireux, on peut s'attendre au pire pour le reste. Clairement, c'est pareil ailleurs.
A+,


Message édité par gilou le 17-05-2009 à 19:12:05

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°1885431
Olivier51
Posté le 17-05-2009 à 19:25:58  profilanswer
 

la_decheance a écrit :

En faite j'utiliser name en locale qui serait en faite le titre d'un jeu...
je vais essayer donc en changeant ca..


C'est surtout que tu ne stoques nul part les valeurs que tu lis dans ton fichier. A chaque boucle, le contenu de j (de type JEUX) sera écrasé.

n°1885433
la_dechean​ce
Posté le 17-05-2009 à 19:40:27  profilanswer
 

ahhh je me suis embrouillé..
 
mais en faite si je passe un pointeur en argument pour ajoutabr,  je dois aussi passer un argument de même type dans la fonction creation mais ca me fais tout changer et passer j en pointeur de JEUX...
 
pour stocker apres le fscanf je dois refarie sa dans une structure ( avec un malloc? )  
 


Message édité par la_decheance le 17-05-2009 à 19:43:18

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  [C] Bus error, arbre et fichiers

 

Sujets relatifs
programmation en C: les matricesAquerir dans Excel des données venant de fichiers txt
[C#] Faire une seule instance de dll pour deux programmesCopier / Coller ligne entre fichiers excel
[C] Probléme de récupération des données à travers ttyS (LINUX)Parse error dans un script de vérification de formulaire
des fichiers qui portent les nom des tables[Menu déroulant / Javascript/ C# ]
[C] Matrice de structures : probleme de remplissageProgrammer en C help SVP microchip PIC18F
Plus de sujets relatifs à : [C] Bus error, arbre et fichiers


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR