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];
};
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;
};
J'essaye de faire un syteme avec allocation dynamique
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;
}
Code erroné dans la fonction juste au dessus : Sélectionner tout - Visualiser dans une fenêtre à part
printf("%d\n", *pIndex->user.server);
Pourquoi le compilateur crie-t-il? comment résoudre?



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;
}
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 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?