Tableau structures argument de fonctions :retour
Résolu/Fermé
getudir78
Messages postés
28
Date d'inscription
vendredi 3 janvier 2014
Statut
Membre
Dernière intervention
2 septembre 2020
-
Modifié le 13 juin 2018 à 16:09
[Dal] Messages postés 6200 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 7 janvier 2025 - 14 juin 2018 à 23:25
[Dal] Messages postés 6200 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 7 janvier 2025 - 14 juin 2018 à 23:25
A voir également:
- Tableau structures argument de fonctions :retour
- Tableau croisé dynamique - Guide
- Tableau ascii - Guide
- Tableau word - Guide
- Trier tableau excel - Guide
- Tableau de raccourcis clavier - Guide
1 réponse
[Dal]
Messages postés
6200
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
7 janvier 2025
1 097
Modifié le 14 juin 2018 à 11:10
Modifié le 14 juin 2018 à 11:10
Salut getudir78,
Dans main
Or, tu passes cette variable à
Comme tout passage de variable, en C, le passage d'une variable opère une copie de cette variable, sur laquelle travaille la fonction.
Donc, dans ta fonction
Dal
Dans main
mapersonne *tab_pers_2 = NULL;, tab_pers_2 est une variable pointeur et la valeur contenue par cette variable est NULL.
Or, tu passes cette variable à
creer_tab().
Comme tout passage de variable, en C, le passage d'une variable opère une copie de cette variable, sur laquelle travaille la fonction.
Donc, dans ta fonction
creer_tab(), lorsque tu alloues de la mémoire et que tu ranges l'adresse mémoire du bloc alloué, tu ranges l'adresse dans une autre variable pointeur (la copie), et donc la variable pointeur déclarée dans main() n'est pas modifiée et continue de pointer vers NULL.
Dal
Modifié le 14 juin 2018 à 11:21
Cependant, puisque tu alloues la mémoire dans ta fonction, le passage du pointeur n'a pas trop d'intérêt, et tu te compliques vraiment la vie.
Alors, une façon beaucoup plus simple de faire est de passer juste le nombre de personnes à créer et que retourne un pointeur sur mapersonne.
Quelque chose comme cela :
Une autre façon simple de faire serait de garder ton prototype , mais d'opérer l'allocation mémoire dans et donc de laisser à la fonction appelante de la responsabilité d'allouer la mémoire.
Il y a une certaine logique à cette dernière approche, car la fonction appelante est aussi responsable de la libération de la mémoire (le , que tu avais d'ailleurs omis dans ton code).
Dal
14 juin 2018 à 22:40
Mon problème est donc résolu!
14 juin 2018 à 23:25
En ce qui me concerne, la première approche me rend un peu nerveux ;-)
Je lui préfère la dernière approche, qui permet de dissocier l'allocation mémoire de l'usage de l'espace alloué par la fonction. Cela me permet de mettre, dans la même fonction appelante, le et le ... et cela me rassure de pouvoir, autant que possible, voir les deux dans la même fonction :-)