Initialisation d'un pointeur dans une struct

Fermé
ColonelHati - 12 nov. 2004 à 17:16
 Jolkdarr - 12 nov. 2004 à 17:55
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 486 Date d'inscription vendredi 16 avril 2004 Statut Membre Dernière intervention 15 mars 2009 160
12 nov. 2004 à 17:50
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
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
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