Initialisation d'un pointeur dans une struct

ColonelHati -  
 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

blurk Messages postés 487 Statut Membre 160
 
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
Jolkdarr
 
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 !
0
Jolkdarr
 
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;
}
0