Initialisation d'un pointeur dans une struct [Fermé]

Signaler
-
 Jolkdarr -
typedef struct Fourmi{
int *liste;
int *memoire;
int position;
}fourmi;


Mes fourmis étant placées dans un tableau initialisé comme ceci:

fourmiliere = (fourmi *) calloc (nbFourmis, sizeof(fourmi));

if (fourmiliere==NULL){
printf ("Problèmes lors de l'allocation de mémoire pour la fourmiliere... \n");
exit(EXIT_FAILURE);
}

J'ai créé une fonction dans laquelle je souhaiterais faire un calloc pour initialiser memoire de chacune de mes fourmis:

void creationFourmis(fourmi *fourmiliere, int nbFourmis, int nbVilles){
int i;

for (i=0; i<nbFourmis; i++){
(fourmiliere+i)->memoire = (int *) calloc (nbVilles, sizeof(int));
if(memoire==NULL){
printf ("Problèmes lors de l'allocation de mémoire pour la memoire... \n");
exit(EXIT_FAILURE);
}
}
}

Mais le compilateur me dit: " Symbole 'memoire' non défini dans la fonction creationFourmis en ligne 64 ", je ne comprend pas pourquoi...

Merci d'avance

3 réponses

Messages postés
488
Date d'inscription
vendredi 16 avril 2004
Statut
Membre
Dernière intervention
15 mars 2009
156
salut,
dans le cas des structures,
il vaut mieux mettre des tableaux statiques à l'intérieur
int tableau[50]; par exemple au lieu de int *tableau.
pour cela, il faut connaitre à l'avance la taille du tableau,
on pourra en deduire la taille de la structure.
le malloc (ou new) se fera sur la structure complète.
(une fois qu'on connait sa taille)
Le contenu d'une structure c'est un peu rigide, mais le nombre d'éléments de structure, lui, est dynamique.
Toutes les autres solutions sont très délicates à gérer.
D'ailleurs, on utilise des classes pour faire du contenu dynamique,
c'est à dire de l'objet (avec un constructeur et un destructeur)
¤
1
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 75185 internautes nous ont dit merci ce mois-ci

Hello !

Ecris plutôt :
int* memoire = (int*) calloc(nbVilles, sizeof(int));
if (memoire == NULL)
{
	printf("Problèmes lors de l'allocation de mémoire pour la memoire... \n");
	exit(EXIT_FAILURE);
} 
else
{
	memoire(fourmiliere+i)->memoire = memoire;
}

Take care !
Correction :
int* memoire = (int*) calloc(nbVilles, sizeof(int));
if (memoire == NULL)
{
	printf("Problèmes lors de l'allocation de mémoire pour la memoire... \n");
	exit(EXIT_FAILURE);
} 
else
{
	(fourmiliere+i)->memoire = memoire;
}