Bonjour,
Je suis occupé de développer une petite application de recherche rapide pour retrouver des id, pseudo,... de joueurs que je stock dans un fichier.
Pour ce faire j'ai fais 2 structures
Code:
1
2
3
4
5
6 struct user{ int server; int id; char pseudo[30]; char pseudo_ingame[30]; };
J'essaye de faire un syteme avec allocation dynamiqueCode:
1
2
3
4
5 struct index{ struct user user; struct index *suivant; };
Code:
1
2 struct index *p14; UpdateIndexFichier(FICHIER14, &p14);
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 bool UpdateIndexFichier(char* Adress, struct index **pIndex) { FILE *fichier; bool status = false; if((status = TestFile(Adress))){ if((fichier = fopen(Adress, "rb"))){ *pIndex = LoadUsers(fichier); printf("%d\n", *pIndex->user.server); fclose(fichier); }else printf("ERREUR lors de l'ouverture du fichier %s\n", Adress); }else printf("Maj Index impossible: Ouverture de fichier impossible\n"); return status; }
Pourquoi le compilateur crie-t-il? comment résoudre?Code:printf("%d\n", *pIndex->user.server);
Avec ce que je viens de vous donner petite question =>Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26 struct index* LoadUsers(FILE *fichier) { struct index tmpIndex, *start = NULL; struct user *user; //fread(&tmpIndex.user, sizeof(tmpIndex.user), 1, fichier); tmpIndex.user.server = 14; tmpIndex.suivant = NULL; start = (struct index*)malloc(sizeof(tmpIndex)); if(start){ start = &tmpIndex; if(DEBUG) printf("Malloc créé: adresse: %d", start); } else printf("erreur lors de la création de mise en mémoire\n"); /* while(!feof(fichier)){ for(cpt ) }; */ return start; }
Comment puis-je vérifier que le malloc c'est bien passé? Puis-je de manière portable récupérer ça taille ? (D'apres mes recherches oui mais pas portable est-ce bien cela?)
Et pour finir j'essaye de free le tout
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 void FreeIndex(struct index *A) { struct index *temp, *tempToFree; /*free(A);*/ if(A){ temp = A; do{ tempToFree = temp; temp = temp->suivant; free(tempToFree); }while(temp != NULL); }else printf("vide"); }
Le programme plante lors du free pas trop d'idée pq je suis à l'aise avec les pointeurs mais c'est la première fois que j'utilise des pointeurs de pointeurs.
Comment peut-on vérifier que le free c'est vraiment produit?
De plus lors de l'affichage de mon index chaîné (actuellement 1 seul éléments pour les test) cela n'affiche pas le résultat voulu.
j'aimerais un petit Feedback également sur les fonctions réalisés.
J'ai également une question concernant les caractères spéciaux pour les pseudo comment puis-je les géré n'est pas trop casse gueule en C? et y à-t-il moyen de gérer ça de manière portable?