Bonjour.
La première chose a bien avoir en tête est que toute variable initialisée dans une fonction sera détruite de la fin d'exécution de celle-ci. Cette précision initiale étant écrite quelle solution ai-je à ma disposition ?
- allouer de la mémoire en dehors de celle de la fonction.
En partant de là les pointeurs font leur apparition pour pouvoir manipuler des adresses. Le prototype sera :
- void fonction1(int **tab);
- int *fonction1();
Remarque : le prototype de la solution 1 fait appel à un double pointeur. L'explication est la suivante :un tableau en C est toujours transmis par son adresse. Ainsi les deux lignes de code suivantes pour afficher une donnée d'un tableau sont équivalentes :
1 2 3 4 5 6
| int tab[1];
tab[0] = 10;
printf("valeur de l'emplacement tab[0] : %d\n", tab[0]);
printf("valeur de l'emplacement tab[0] : %d\n", tab); |
Donc si je désire transmettre une adresse d'un futur tableau il me faut transmettre l'adresse de l'adresse du futur tableau. Ca devient tordu
.
Cette première solution à l'avantage de pouvoir retourner par exemple un état de la création du tableau. Un retour de type booléen peut être une bonne idée.
Pour la deuxième solution c'est plus facile à comprendre. On renvoie simplement l'adresse du bloc alloué.
L'inconvénient, quelque soit la solution du prototype choisie, est qu'il faudra bien penser à libérer cette mémoire par free();. On touche ici au plus gros problème de ce langage : la gestion mémoire.
Pour l'instant je ne te donne aucune ligne de code pour mettre en pratique la solution finale. N'hésites pas à revenir ici si les ennuis persistent
.
Voila un début de piste pour ton problème. En espérant t'aider un peu.
Partager