Initialisation de structure

goutbouyo Messages postés 429 Date d'inscription mardi 6 juillet 2004 Statut Membre Dernière intervention 12 janvier 2008 - 12 nov. 2004 à 18:43
goutbouyo Messages postés 429 Date d'inscription mardi 6 juillet 2004 Statut Membre Dernière intervention 12 janvier 2008 - 15 nov. 2004 à 23:00
Salut,

J'ai une structure temps:
struct temps 
{
float time, elapsedTime, lastTime;
};


Je l'itinialise :
struct temps Time[2];


Donc ici, on pourras mettre Time[1] et Time[2].

Mais j'aimerais ne pas avoir à définir un nombre au départ car à l'initialisation je ne sais pas combien de structures temps j'aurai besoin.

Si je fais ça c'est bon ??? :
struct temps Time[];

82 réponses

goutbouyo Messages postés 429 Date d'inscription mardi 6 juillet 2004 Statut Membre Dernière intervention 12 janvier 2008
12 nov. 2004 à 22:38
Justement j'ai lu et ils mettent qu'on peut omettre l'initialisation de la taille d'un tableau.

Je vais voir pour le debugger, mais en fait j'y arrive pas, je vois que les erreurs en assembleur et moi j'y connais rien en assembleur...
0
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
12 nov. 2004 à 22:42
"Justement j'ai lu et ils mettent qu'on peut omettre l'initialisation de la taille d'un tableau"

non, seulement si tu l'initialises

la taille doit etre resolu à la compilation, t'es sur d'avoir compris les tableaux ?
0
cs_Chouchou182 Messages postés 252 Date d'inscription vendredi 13 juin 2003 Statut Membre Dernière intervention 25 avril 2011 1
13 nov. 2004 à 19:34
Salut

int nb_ennemies=3;
struct temps* Time = (struct temps*)malloc(nb_ennemies * sizeof *Time);


Il me semble (je me trompe peut-être) que cela alloue la place nécessaire pour stocker 3 pointeurs soit quelque chose comme 12octets, à peine de quoi stocker un ou deux floats.

Peut-être qu'en remlaçant par:
int nb_ennemies=3;
struct temps* Time = (struct temps*)malloc(nb_ennemies * sizeof Time);

la place allouée sera suffisante et ne provoquera pas donc pas d'access violation.

Suis-je totalement à côté de la plaque ? (je le crains)

A++

Chouchou
0
goutbouyo Messages postés 429 Date d'inscription mardi 6 juillet 2004 Statut Membre Dernière intervention 12 janvier 2008
13 nov. 2004 à 19:52
Oui tu as raison, en effet on peut seulement omettre la taille d'un tableau si on initialise les valeurs.

Je sais pas ce que j'ai fais mais maintenant ça marche.

Par contre, il y a quelque chose que je ne comprends pas.

J'initialise :

struct temps *Time = (struct temps*)malloc(1* sizeof *Time);

Mes fonctions utilisent 2 Time.time et ça plante pas ...

Par contre à la fin du prog, quand je quitte ça plante.

Si je mets :
struct temps *Time = (struct temps*)malloc(3 * sizeof *Time);

Ca marche nickel !

Faut il à la fin du prog libérer la mémoire utilisée pat les structures ???
J'ai vu qu'avec des pointeurs il fallait le faire.
0

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

Posez votre question
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
13 nov. 2004 à 19:57
Chouchou182> J'ai l'impression que tu inverses:
int nb_ennemies=3;
struct temps* Time = (struct temps*)malloc(nb_ennemies * sizeof *Time);

alloue de la mémoire pour 3 structure temps (sizeof *Time = sizeof(temps))
alors que
int nb_ennemies=3;
struct temps* Time = (struct temps*)malloc(nb_ennemies * sizeof Time);

alloue seulement 12 octets (Time est un pointeur, sa taille est 4)
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
13 nov. 2004 à 19:58
goutbouyo> Normalement il faut un free pour chaque malloc, mais si tu ne le fais pas ce n'est pas si grave, le SE le fera lui même
0
goutbouyo Messages postés 429 Date d'inscription mardi 6 juillet 2004 Statut Membre Dernière intervention 12 janvier 2008
13 nov. 2004 à 20:12
Ok d'accord.

Mais sais tu pourquoi si je fais ça :

struct temps *Time = (struct temps*)malloc(1 * sizeof *Time);


Ca me permet quand même d'utiliser Time[1].time et Time[2].time ???

Alors qu'avec ça :

struct temps Time[2];


Je peu seulement utiliser Time[1].time ???
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
13 nov. 2004 à 20:17
-N'oublie pas que tu peu utiliser aussi Time[1].time
-En fait malloc alloue au moins ce que tu lui demande, ce n'est pas grave s'il en alloue un peu plus, du moment qu'il en alloue suffisament.

Avec ta premiere solution, tu ne devrais utiliser que Time[0]; avec la deuxieme tu peux utiliser Time[0] et Time[1].

Les résultats sont différents parce que les données ne sont pas situées au même endroit selon la méthode (malloc alloue dans le tas, sinon c'est sur la pile ou le segment données)
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
13 nov. 2004 à 20:18
Au début du message je voulais dire Time[0].time et pas Time[1].time
0
goutbouyo Messages postés 429 Date d'inscription mardi 6 juillet 2004 Statut Membre Dernière intervention 12 janvier 2008
13 nov. 2004 à 20:20
Donc malloc en alloue plus alors ...
Et pourquoi à la fin de mon prog ça plante quand j'en ai pas alloué assez ???
Ca plante seulement quand je quitte.
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
13 nov. 2004 à 20:24
Ca plante parce que tu n'a pas alloué assez. Non, je ne sais pas d'ou ca vient en fait...
0
goutbouyo Messages postés 429 Date d'inscription mardi 6 juillet 2004 Statut Membre Dernière intervention 12 janvier 2008
13 nov. 2004 à 20:43
Bon tant pis...
Pour faire un free avec une structure, c'est pas :
free (struct Time); ???
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
13 nov. 2004 à 20:47
Tu fais un free sur un pointeur, pas sur une structure!
int nb_ennemies=3;
struct temps* Time = (struct temps*)malloc(nb_ennemies * sizeof *Time);
//...
free(Time);
0
goutbouyo Messages postés 429 Date d'inscription mardi 6 juillet 2004 Statut Membre Dernière intervention 12 janvier 2008
13 nov. 2004 à 21:17
Ok merci c'est bon !!!
@++++++++
0
Arnaud16022 Messages postés 1329 Date d'inscription vendredi 15 août 2003 Statut Membre Dernière intervention 16 juin 2010 2
13 nov. 2004 à 21:54
haha je le savais que c'était pour les md2!
mais je vois pas du tout pourquoi tu crées un Timer pour chaque perso.
primo si vraiement t'en as besoin, tu pourrais modifier le code de digiben en incluant directement ton timer dans la classe t3dmodel, en n'oubliant pas de l'initialiser et d'allourer ta mem au chargement.
secundo sa fonction est trop mal foutue! mais alors vraiement.
il vaut mieux passer le nbre de millisecondes passées entre ta frame et la précédente et modifier un chouïa le code.

ps, ce message attire les foules on dirait, j'ai recu 58 messages rien qu'aujourd'hui! pôv bal...
0
goutbouyo Messages postés 429 Date d'inscription mardi 6 juillet 2004 Statut Membre Dernière intervention 12 janvier 2008
14 nov. 2004 à 00:41
Oui en effet c'est pour les md2.

J'ai du modifier le code pour pouvoir afficher plus d'un md2 à la fois, mais ça foirait au niveau du temps(ça prenait le temps par rapport au 1er modèle à chaque fois, donc le 2ème était mal animé).

Donc j'utilise une structure temps comme ça j'ai un temps pour chaque perso.

C'est vrai que j'aurais pû l'inclure dans la classe t3dmodel, mais bon ...

PS c'est vrai que ce message attire les foules, tant mieux pour moi !!! LOL
0
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
14 nov. 2004 à 04:29
faudrais peut etre apprendre le langage avant de s'en servir

moi je comprends pas
0
goutbouyo Messages postés 429 Date d'inscription mardi 6 juillet 2004 Statut Membre Dernière intervention 12 janvier 2008
14 nov. 2004 à 11:11
J'apprends au fur et à mesure....

Tu crois pas que je vais apprendre en un coup un livre de 800 pages sur le C/C++ alors que j'ai déjà pas mal de boulot cette année !
0
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
14 nov. 2004 à 16:56
arrete, tu connais rien aux tableaux, prends le k&r ca fait 200pages

ca te meneras a rien ce que tu fais
0
goutbouyo Messages postés 429 Date d'inscription mardi 6 juillet 2004 Statut Membre Dernière intervention 12 janvier 2008
14 nov. 2004 à 17:39
En fait j'ai déjà un livre de 800 pages : "Langage C" de Claude Delannoy, donc j'ai compris les tableau.

Et si j'utilise pas le Time[0].time c'est juste pour une question de facilité dans mon programme.

C'est plus simple de commencer par l'ennemie 1 que par l'ennemie 0, non ???
0
Rejoignez-nous