Variable globale et malloc, explication
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:
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:
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:
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 :)