Bonjour, j'ai trouvé une question sur le web mais je ne saurais pas trop comment y répondre, je ne comprends pas la spécification comme quoi element reçu en paramètre ne doit pas partager la même zone mémoire que la nouvelle structure _fig

Soient les déclarations suivantes:
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
28
29
30
31
32
33
34
struct _point {
char x;
char y;
};
typedef struct _point point;
struct _rec {
point bg;
point hd;
};
struct _cer {
point cen;
unsigned char r;
};
struct _tri {
point pa;
point pb;
point pc;
};
typedef struct _cer cercle;
typedef struct _tri triangle;
typedef struct _rec rectangle;
enum type = {REC, CER, TRI};
union _element {
rectangle *rec;
cercle *cer;
triangle *tri;
};
typedef union _element ele;
struct _fig {
enum type typele;
ele element;
struct _fig *suivant;
};
typedef struct _fig fig;

Code : Sélectionner tout - Visualiser dans une fenêtre à part
fig * cons(ele element, enum type tf);
La fonction cons permet de construire une structure de type fig selon le paramètre reçu element
dont le type est donné par tf. La fonction cons retourne un pointeur sur la structure de type fig
construite. Le champ suivant de cette structure sera mis à NULL. Votre code doit traiter toute les
allocations dynamiques nécessaires pour que la structure construite ne partage aucune zone mémoire
avec le paramètre reçu element. La fonction cons retourne NULL si tf ne correspond à aucune
des valeurs définies dans enum type.


si je fais fig = (fig*) malloc(sizeof(struct _fig));
fig->typele = tf;
fig->element = element;
fiig->suivant = NULL;

return fig;

ça devrait être bon non ?

J'ai de la difficulté à comprendre comment on peut initialiser un type union sans accéder a un de ses membre par un point.

l'appele de la fonction se ferait comment ? Comme ceci ?

ele unElement;
unElement.cer = NULL;

cons(unElement, CER);

Je ne vois pas comment celui passé en paramètre puisse partager la même zone mémoire que dans la struct fig alloué dynamiquement, puisque c'est une copie.

Merci pour votre aide.