J'aimerais initialiser un tableau de structure dans une fonction. Pour ce faire, j'aurais besoin d'écrire tab = create_map().
Or, mettons que je ne veuille pas passer par malloc() directement.
Je devrais donc créer un pointeur sur ce tableau, et renvoyer l'adresse du pointeur à la fin de ma fonction create_map().
Mais, à quoi devrait ressembler ce pointeur si je veux pouvoir être capable d'écrire, autre part dans le programme, dans une autre fonction, tab[1][1] = {{2}, {3}} ? Est-ce même possible?
Merci d'avance, en vous souhaitant une agréable journée
Une fonction ne peut pas retourner un tableau. Un scalaire oui (pointeur, nombre, enum, booléen), une structure oui mais un tableau non.
S'il n'y a pas allocation dynamique par malloc(), impossible de générer un tableau à transmettre.
On ne crée pas un pointeur, un pointeur pointe sur de la mémoire existante (en global ou sur la pile) ou sur de la mémoire allouée dynamiquement. Ici seule possibilité la dernière.
La syntaxe tab[1][1] = {{2}, {3}} est totalement impossible en C. {{2}, {3}} ne peut être qu'à droite d'un objet que l'on est en train de créer. double tab[1][2] = {{2},{3}}; est possible mais c'est lui qui crée la variable.
Il ne reste donc qu'une solution, c'est celle qu'indique robun. Et du coup il faudrait plutôt l'appeler initialize_map().
Il faudrait aussi se poser la question de savoir si la taille du tableau est connue lors de la compilation ou seulement à l'exécution
...
Je parlais d'un tableau dont la taille est connu à la compilation, mon mauvais
Dalfab a écrit:
S'il n'y a pas allocation dynamique par malloc(), impossible de générer un tableau à transmettre.
Je bloque un peu là dessus, et surtout sur le sens que tu veux donner à transmettre
double tab[1][2];
initialize_tab(tab);
Au final, là tu transmet bien le tableau à une autre fonction. Juste que ce tableau alloué automatiquement se détruira à la fin de l'execution de la fonction qui l'a créé, et donc que créer un pointeur dessus pour le retourner ne ferais que retourner un pointeur sur une zone libéré en mémoire.
Corrigez-moi si je me trompe
Merci à vous tous en tout cas pour vos réponses, et Dalfab pour tes éclaircisements
- Edité par Titou210Titou 22 mars 2019 à 1:49:56
Initialiser un tableau de struct dans une fonction
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
En recherche d'emploi.