andoh_wilfried :
si j'affecte le Handle de ma structure EXPR *data qui est allouée dynamique à une variable TioS PERSO je doit donc faire sizeof(data) pour obtenir sa taille.
En fait sizeof(data) == sizeof(EXPR *), donc 4 octets ... Je ne pense pas que c'est ce que vous cherchez ...
La taille de la structure EXPR est donnée par sizeof(EXPR).
andoh_wilfried :
Comment fait sizeof : il parcours les élément de les données dans la structure pour calculer la taille de chaque élément y compris des pointeurs interne à la structure eux même alloué dynamiquement ???????????
( je suis un peu stressé pour la Taille qouique Kevin a dit que ça marche)
Si je ne me trompe pas, la 'fonction' sizeof s'exécute à la
compilation non pas à
l'exécution. Le compilateur n'a aucun moyen de savoir la taille de ce qui est pointé par data à ce moment ...
Pour :
typedef struct{
short type;
long num;
char *str;
} EXPR;
sizeof(EXPR) == sizeof(short) + sizeof(long) + sizeof(char *)
Si str pointe vers une chaîne, la longueur de cette dernière ne sera pas ajouté à la somme. Encore une fois, sizeof(char *) retourne la taille d'un pointeur (4 octets).
Lorsqu'il y a une structure d'imbriquée (une structure je dis, non pas un pointeur vers une structure), elle est évidemment considérée comme n'importe quel autre type et sa taille est ajoutée à la somme.
andoh_wilfried :
Mais là ou j'ai peur c'est lorsque je vais loader ma structure prochainement :
mes pointeurs seront-ils toujours valides ???
En théorie, non. Vous devez charger à partir du fichier les structures une par une et, ensuite, assigner les pointeurs.