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 structure user : Sélectionner tout - Visualiser dans une fenêtre à part
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 dynamique
Code structure index : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 struct index{ struct user user; struct index *suivant; };
Code main : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 struct index *p14; UpdateIndexFichier(FICHIER14, &p14);
Code fonction pour mettre a jour l'index : Sélectionner tout - Visualiser dans une fenêtre à part
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 erroné dans la fonction juste au dessus : Sélectionner tout - Visualiser dans une fenêtre à part printf("%d\n", *pIndex->user.server);
Avec ce que je viens de vous donner petite question =>
Code allocation en mémoire : Sélectionner tout - Visualiser dans une fenêtre à part
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 fonction pour free l'allocation : Sélectionner tout - Visualiser dans une fenêtre à part
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?
Partager