malloc & characteres speciaux
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];
}; |
Code:
1 2 3 4 5
|
struct index{
struct user user;
struct index *suivant;
}; |
J'essaye de faire un syteme avec allocation dynamique
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;
} |
Code:
printf("%d\n", *pIndex->user.server);
Pourquoi le compilateur crie-t-il? comment résoudre?
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;
} |
Avec ce que je viens de vous donner petite question =>
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?