Hello,

pour un projet en C, j'aimerais créer une liste de structure (pour pouvoir maintenir une liste d'utilisateur).

Voilà comment je procède :

Déclarer en globale :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
GSList *listUser; (j'utilise la GSList de la glib)
FicheUser *fiche; (ma structure avec laquelle je veux faire ma liste)
Voici une fonction que j'utilise pour ajouter un user :
Code : 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
27
void choixAjoutUser(int type){
	int numUser;
	//FicheUser fiche;
 
	fiche = (FicheUser*) malloc(sizeof(FicheUser)+20);
 
	//listeuser affiche les users UNIX  
	listeUser();
 
	scanf( "%d", &numUser );	
 
 
	fiche->nom = (char*) malloc(sizeof(char*)*20);
	fiche->nom = tabNom[numUser];
	fiche->type = type;
	fiche->UID = tabUID[numUser];
	fiche->pid = 0;
	//on ajoute le user UNIX dans le tableau des users
	//tabUser[nbUser] = tabUID[UIDuser];
 
	//table[nbUser] = fiche;
	listUser = g_slist_append(listUser, fiche);
 
	//on ouvre un terminal pour le nouveau user :
	creationUser(tabNom[numUser],type);
	nbUser++;
}
Voici une fonction que j'utilise pour afficher mes users :
Code : 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
int listeUserProject(){
	int i, t;
	FicheUser* fiche; 
 
       i = 0;
 
    GSList *node = listUser;
 
    while(node){  
        fiche = node->data;  
 
        printf("Numéro : %d --- Nom : %s \t UID : %d \t PID : %d \t Status : %s \n",i,fiche->nom,fiche->UID,fiche->pid,tabType[fiche->type]);
        node = g_slist_next(node);
        i++;
    }
 
	if(i == 0){
	    printf("Il n'existe aucun utilisateur dans ce projet");
	}
    return i;
}
Est ce que c'est la bonne façon de faire ? Je trouve cela bizarre de faire un malloc sur une variable globale pour éviter qu'elle se fasse écraser lorsque la fonction est appelée une deuxième fois.

Merci pour vos éclaircissement