Tableau dynamique de structure plusieurs structure différente en C ?

Nico_35136 Messages postés 55 Date d'inscription mercredi 3 janvier 2007 Statut Membre Dernière intervention 21 février 2012 - 26 oct. 2011 à 16:20
cs_LA_Tupac Messages postés 305 Date d'inscription jeudi 29 avril 2004 Statut Membre Dernière intervention 18 janvier 2012 - 27 oct. 2011 à 16:38
Bonjour a tous,

Voila je débute dans l'allocation dynamique en C voici mon problème.

Je possédé 5 structure de taille différentes qui vont contenir des paramètres propre à leurs fonctions (ex : light, HVAC, heater, Cooler etc)

le problème est que ces fonction peuvent êtres dans n'importe quel ordre, donc si je le fait en statique je devrais créer je devrais multiplier les structure et donc consommer bien trop de mémoire RAM car chaque fonction peuvent apparaître plusieurs fois ! (je ne sais pas si je suis bien clair.....)

Mon idée est donc de créer un tableau de taille dynamique contenant des structure de taille variable.

J'ai bien trouvé des sources sur le site cppfrance par contre j'ai l'impression qu'il créer un tableaux avec des structure identique....

Comment faire pour pour créer un tableau avec des structure différents ?

Merci

11 réponses

stagiairecpp Messages postés 37 Date d'inscription jeudi 22 octobre 2009 Statut Membre Dernière intervention 10 décembre 2011 15
26 oct. 2011 à 23:15
Salut,

Déclare une structure parent uCGenerique qui contiendra un char type et un pointeur void *uC.

'type' contiendra une valeur définie correspondant au type de structure pointé par 'uC'.
Quand tu assignes uC tu castes ton pointeur de structure en void*, à l'inverse quand tu veux accéder à un de ses membres tu castes avec le pointeur de structure correspondant à 'type'.

Ton tableau sera un tableau de *uCGenerique.

++
1
BunoCS Messages postés 15472 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 25 mars 2024 103
26 oct. 2011 à 16:27
Hello,
Comment faire pour pour créer un tableau avec des structure différents ?

Tu ne peux pas. Un tableau contient forcément un seul type de données.
Néanmoins, tu peux biaiser en déclarant un tableau de pointeurs. Mais, lors du parcours de ton tableau, tu ne sauras pas de quel type est ton objet.

La parade est, en programmation objet, de définir un objet Parent et de faire hériter tous tes autres objets de cette classe Parent. Ainsi, tu peux avoir un tableau de Parents mais avec des objets "exotiques"

@+
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
0
cs_LA_Tupac Messages postés 305 Date d'inscription jeudi 29 avril 2004 Statut Membre Dernière intervention 18 janvier 2012 1
26 oct. 2011 à 16:45
La parade est, en programmation objet, de définir un objet Parent et de faire hériter tous tes autres objets de cette classe Parent.

Oui, encore faut-il que les class aient un rapport entres elles
0
BunoCS Messages postés 15472 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 25 mars 2024 103
26 oct. 2011 à 16:46
Certes, ne serait-ce que pour garder une certaine cohérence et une bonne maintenabilité.


@+
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
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
26 oct. 2011 à 17:01
Ok merci pour vos réponses, je programme sur µC donc exit la POO...

J'ai 5 allocation mémoire a faire je dois donc créer 5 tableau de taille 1 dynamique ?

C'est pas un peu bête de faire un tableau de 1 ?
0
BunoCS Messages postés 15472 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 25 mars 2024 103
26 oct. 2011 à 17:13
Qu'est-ce que tu cherches à faire exactement?
Quels sont tes structures? Pourquoi un tableau?


@+
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
0
Nico_35136 Messages postés 55 Date d'inscription mercredi 3 janvier 2007 Statut Membre Dernière intervention 21 février 2012
26 oct. 2011 à 17:31
Pour l'explication, j'ai 5 contrôleur qui peuvent être du même type ou bien tous différent. Pour chaque contrôleur une structure spécifiques.

Donc au final je créer une allocation dynamique pour ces 5 contrôleur donc a chaque nouvelle boucle du programme je vérifie si le type du contrôleur à changé si oui je fais un free et de nouveaux un malloc pour le nouveaux contrôleur.

Pourquoi un tableau?


Les seul exemples que j'ai vu sur le net sont des allocation dynamique de tableau.... Après je suis ouvert à toute proposition.
0
Nico_35136 Messages postés 55 Date d'inscription mercredi 3 janvier 2007 Statut Membre Dernière intervention 21 février 2012
27 oct. 2011 à 09:33
Ok... Tu n'aurais pas un petit exemple ( pour la structure ce va) mais poure le reste c'est un peu flou pour moi
0
Nico_35136 Messages postés 55 Date d'inscription mercredi 3 janvier 2007 Statut Membre Dernière intervention 21 février 2012
27 oct. 2011 à 09:39
les fautes d'orthographe que j'ai fais... désolé je ne suis pas encore bien réveillé....
0
cs_LA_Tupac Messages postés 305 Date d'inscription jeudi 29 avril 2004 Statut Membre Dernière intervention 18 janvier 2012 1
27 oct. 2011 à 11:10
Sachant que c'est de la donnée brute, moi je passerai par un tableau de char* mais bon.
char *data[5];//declaration
data[0] = new char[TailleStruct];//allocation
montypestruct *mastruct = (monstypestruct*)data[0];//cast pour travailler de manière ordonée
//...
delete data[0];//destruction après

ps: pour les fautes on a vu bien pire ne t'en fais pas ;)
0
cs_LA_Tupac Messages postés 305 Date d'inscription jeudi 29 avril 2004 Statut Membre Dernière intervention 18 janvier 2012 1
27 oct. 2011 à 16:38
Oh mon dieu j'ai oublié la balise et je suis le premier à gueuler
char *data[5];//declaration 
data[0] = new char[TailleStruct];//allocation 
montypestruct *mastruct = (monstypestruct*)data[0];//cast pour travailler de manière ordonée 
//... 
delete data[0];//destruction après
0
Rejoignez-nous