Initialisation d'une variable de type structure
Résolu/Fermé
allstarwe
Messages postés
9
Date d'inscription
jeudi 5 novembre 2015
Statut
Membre
Dernière intervention
23 novembre 2015
-
5 nov. 2015 à 09:10
allstarwe Messages postés 9 Date d'inscription jeudi 5 novembre 2015 Statut Membre Dernière intervention 23 novembre 2015 - 5 nov. 2015 à 18:20
allstarwe Messages postés 9 Date d'inscription jeudi 5 novembre 2015 Statut Membre Dernière intervention 23 novembre 2015 - 5 nov. 2015 à 18:20
A voir également:
- Initialisation d'une variable de type structure
- Logiciel calcul structure bois gratuit - Télécharger - Architecture & Déco
- Clear type - Guide
- Structure d'un rapport de stage - Guide
- Faiblesse type psy ✓ - Forum Jeux vidéo
1 réponse
[Dal]
Messages postés
6200
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
7 janvier 2025
1 097
Modifié par [Dal] le 5/11/2015 à 11:23
Modifié par [Dal] le 5/11/2015 à 11:23
Salut allstarwe,
Il y a plusieurs problèmes dans ton (extrait) de code.
Tu définis un
Ta fonction initCar déclare un tableau car, que tu passes ensuite à une fonction
Je ne comprend pas très bien
Il est préférable de spécialiser ta fonction d'initialisation en la simplifiant pour initialiser un VEHICULE, et de lui passer un pointeur sur ta structure. Ainsi, ta fonction aura accès à l'adresse mémoire qui lui été passée pour opérer l'initialisation, et c'est la responsabilité de la fonction appelante (main, ou une autre fonction que tu créeras) d'allouer l'espace mémoire nécessaire au stockage des struct des différents VEHICULEs.
Quelque chose comme cela :
Cet exemple simplifié alloue statiquement un tableau dans
Dal
Il y a plusieurs problèmes dans ton (extrait) de code.
Tu définis un
typedefVEHICULE, qui est un alias de
struct voiture, mais tu n'utilise ni l'un ni l'autre dans ton code, mais un type "Voiture" qui n'est pas définit.
Ta fonction initCar déclare un tableau car, que tu passes ensuite à une fonction
roadMap(). Or, la mémoire de ce tableau n'est garantie d'être allouée que dans la fonction qui l'a déclarée (à moins que tu l'alloues avec malloc, puis que tu libères la mémoire avec free).
Je ne comprend pas très bien
Voiture car [NB_LIN][NB_COL]. Si tu cherches à créer un tableau de deux voitures, cela ne me semble pas cohérent d'avoir un tableau à deux dimensions. De plus, la position est stockée dans la struct.
srand(time (NULL));ne doit être exécuté qu'une seule fois par ton programme, tu ne dois donc pas le mettre dans une portion de code exécutée plusieurs fois.
Il est préférable de spécialiser ta fonction d'initialisation en la simplifiant pour initialiser un VEHICULE, et de lui passer un pointeur sur ta structure. Ainsi, ta fonction aura accès à l'adresse mémoire qui lui été passée pour opérer l'initialisation, et c'est la responsabilité de la fonction appelante (main, ou une autre fonction que tu créeras) d'allouer l'espace mémoire nécessaire au stockage des struct des différents VEHICULEs.
Quelque chose comme cela :
#include <stdio.h> #include <stdlib.h> #include <time.h> typedef struct voiture VEHICULE; struct voiture { char vehicule; /* N, S, E, O */ int vitesse; /* 1 => lent ou 2 => rapide */ int pos_i; /* Position courante 'i' du véhicule sur la route */ int pos_j; /* Position courante 'j' du véhicule sur la route */ char alig; /* 'g' => gauche ou 'd' => droite */ }; void initCar(VEHICULE * car, int vit, int pi, int pj, char al) { char direction [] = {'N', 'S', 'E', 'W'}; car->vehicule = direction [rand () % 4]; car->vitesse = vit; car->pos_i = pi; car->pos_j = pj; car->alig = al; } int main(void) { VEHICULE tab[2]; /* tableau de 2 VEHICULEs */ srand(time (NULL)); initCar(&tab[0], 1, 23, 1, 'd'); initCar(&tab[1], 1, 21, 1, 'd'); return 0; }
Cet exemple simplifié alloue statiquement un tableau dans
main(). Tu peux, bien sûr, aussi gérer dynamiquement l'allocation avec malloc / free.
Dal
5 nov. 2015 à 11:23
5 nov. 2015 à 11:51
Après, tu fais ce que tu veux avec.
Par exemple :
Appelée dans avec quelque chose comme : .
Dal
5 nov. 2015 à 12:37
5 nov. 2015 à 13:22
J'ai bien réussis à initialisé mes 2 voitures par contre je ne vois pas comment les faire apparaître dans ma fonctions roadMap (http://pastebin.com/2HWA8RCZ). Si tu pouvez m'aidé :)
5 nov. 2015 à 15:46
Ton lien Pastebin ne mène sur rien.
C'est mieux de poster ton code sur le forum. Cela dit, je n'ai pas envie de me plonger dans des centaines de lignes de code hors sujet par rapport à ta demande additionnelle, à laquelle je crois déjà avoir répondu avec un exemple simple.
Si tu tiens à envoyer du code additionnel, essaye de cerner le problème et d'envoyer un exemple contenu de quelques lignes illustrant ton problème, j'apprécierai grandement.
Dal