Erreur : Invalid struct or union type

Résolu
Nico_35136 Messages postés 55 Date d'inscription mercredi 3 janvier 2007 Statut Membre Dernière intervention 21 février 2012 - 31 oct. 2011 à 14:47
Nico_35136 Messages postés 55 Date d'inscription mercredi 3 janvier 2007 Statut Membre Dernière intervention 21 février 2012 - 2 nov. 2011 à 09:22
Bonjour,

Voila , en ce moment je m’arrache les cheveux sur une allocation dynamique d'une structure en mémoire.

Voici mes variable et structure que j'ai declaré dans mon .h :

typedef struct tLightActuatorData
{
unsigned short usLuxTarget;
unsigned short usSwitchOnLevel;
unsigned char  ucControlerStartAt;
unsigned char  ucSwitchOffDelay; 
unsigned char  ucScene1;
unsigned char  ucScene2;
unsigned char  ucScene3;
unsigned char  ucScene4;
unsigned char  ucScene5;	

} LightActuatorData;

extern unsigned char  *far *Actuator_1_struct;


Dans mon main j’initialise Actuator_1_struct :

	Actuator_1_struct = calloc ( 1 , sizeof(unsigned char) );


et j’appelle ma fonction :

        if (Actuator_1_Settings.bit.bActuatorFunctionChanged == TRUE)
{	
Actuator_1_struct = realloc(Actuator_1_struct, sizeof(struct tLightActuatorData));
}
if ( Actuator_1_Settings.bit.bKindCommand == LIGHT_ONOFF)
{
        Actuator_1_struct[0].ucScene1 = aucSondeParam [ KNX_EO_PARM_9_ACTUATOR_1 ];
}


Mais j'obtiens une erreur dans la dernière ligne qui est :

[Error(ccom)] invalid struct or union type


Quelqu’un pourrai m'aider ?

Merci

8 réponses

cs_LA_Tupac Messages postés 305 Date d'inscription jeudi 29 avril 2004 Statut Membre Dernière intervention 18 janvier 2012 1
1 nov. 2011 à 18:54
erf trompé de balise désolé
LightActuatorData* StructArray = (LightActuatorData*)Actuator_1_struct;
StructArray[0].ucScene1 = aucSondeParam[KNX_EO_PARM_9_ACTUATOR_1];
3
cs_LA_Tupac Messages postés 305 Date d'inscription jeudi 29 avril 2004 Statut Membre Dernière intervention 18 janvier 2012 1
31 oct. 2011 à 15:09
Salut.
Actuator_1_struct = calloc ( 1 , sizeof(unsigned char) );

ça ne suffit pas pour ta struct... elle doit faire
sizeof(LightActuatorData)

non?
0
Nico_35136 Messages postés 55 Date d'inscription mercredi 3 janvier 2007 Statut Membre Dernière intervention 21 février 2012
31 oct. 2011 à 15:14
Non ça ne change rien.

Par contre je doute que le problème viens d'ici. En effet peut importe la taille au debut du programme puisque je fais un realloc à la taille souhaité par la suite.

J'ai faux ?
0
cs_LA_Tupac Messages postés 305 Date d'inscription jeudi 29 avril 2004 Statut Membre Dernière intervention 18 janvier 2012 1
31 oct. 2011 à 18:01
Non c'est bien ça..
Du coup il manque un peut de code pour avoir une vue plus claire du soucis...
Et quand tu dis:
Mais j'obtiens une erreur dans la dernière ligne

Quelle ligne exactement?
        if (Actuator_1_Settings.bit.bActuatorFunctionChanged == TRUE)//ici?
{	
Actuator_1_struct = realloc(Actuator_1_struct, sizeof(struct tLightActuatorData));//ici?
}
if ( Actuator_1_Settings.bit.bKindCommand == LIGHT_ONOFF)//ici?
{
        Actuator_1_struct[0].ucScene1 = aucSondeParam [ KNX_EO_PARM_9_ACTUATOR_1 ];//ici?
}
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Nico_35136 Messages postés 55 Date d'inscription mercredi 3 janvier 2007 Statut Membre Dernière intervention 21 février 2012
31 oct. 2011 à 21:01
dans celle la :

 Actuator_1_struct[0].ucScene1 = aucSondeParam [ KNX_EO_PARM_9_ACTUATOR_1 ];
0
cs_LA_Tupac Messages postés 305 Date d'inscription jeudi 29 avril 2004 Statut Membre Dernière intervention 18 janvier 2012 1
1 nov. 2011 à 18:53
Bon il faut que tu cast ton unigned char avant de l'utiliser.
LightActuatorData* StructArray = (LightActuatorData*)Actuator_1_struct;
StructArray[0].ucScene1 = aucSondeParam[KNX_EO_PARM_9_ACTUATOR_1];

Et ça devrait marcher
0
Nico_35136 Messages postés 55 Date d'inscription mercredi 3 janvier 2007 Statut Membre Dernière intervention 21 février 2012
1 nov. 2011 à 20:44
Merci ne t'inquiète pas pour les balise j'avais très bien compris je testerais le code demain.
0
Nico_35136 Messages postés 55 Date d'inscription mercredi 3 janvier 2007 Statut Membre Dernière intervention 21 février 2012
2 nov. 2011 à 09:22
Alléluia,ça fonctionne merci pour tous !
0