[C] Allocation dynamique d'une grille de structure.

Allocation dynamique d'une grille de structure. [C] - C - Programmation

Marsh Posté le 01-03-2009 à 14:05:08    

:hello:

 

Voila, je veux créer une grille (tableau de tableau) d'une structure. Le code est assez clair je crois, mes je n'arrive pas à accéder aux élèments de la structure:

Code :
  1. typedef struct {
  2. int x;
  3. int y;
  4. int etat; // 0 = mort ; 1 = vivant
  5. }t_Cellule;
 


Code :
  1. int** InitialiserGrille(void)
  2. {
  3. int i,j;
  4. int **grille;
  5. if ((grille = malloc(COLONNE*sizeof(t_Cellule*))) == NULL)
  6. {
  7.  fprintf(stderr,"Erreur lors de l'allocation\n" );
  8.  exit(EXIT_FAILURE);
  9. }
  10. for (i =0;i<COLONNE;i++){
  11.  grille[i] =malloc(LIGNE*sizeof(t_Cellule));
  12. }
  13. for (i=0;i < LIGNE;i++){
  14.  for (j=0;j <COLONNE;j++){
  15.   //*(grille[i][j]).etat = 0;
  16.   /*grille->cellule[i][j].y = j;
  17.   grille->cellule[i][j].etat = 0;*/
  18.  }
  19. }
  20. return grille;
  21. }
 

(La partie qui pose probleme est la partie commentée)

 

Si je fais "grille[i][j].etat = 0;", la compilation retourne :
main.c: In function 'InitialiserGrille':
main.c:36: error: request for member 'etat' in something not a structure or union

 

Si je fais " grille[i][j]->etat = 0;"
main.c: In function 'InitialiserGrille':
main.c:36: error: invalid type argument of '->'


Message édité par boblenain200 le 01-03-2009 à 14:07:23
Reply

Marsh Posté le 01-03-2009 à 14:05:08   

Reply

Marsh Posté le 01-03-2009 à 14:58:29    

Code :
  1. int **grille;


ça serait pas plutôt

Code :
  1. t_Cellule ** grille

?


---------------
By bob.
Reply

Marsh Posté le 01-03-2009 à 15:04:08    

[:smiley du mec qui se tient la tete]
 
... oui .. c'est çà :o
 
Merci :jap:

Reply

Marsh Posté le 01-03-2009 à 21:51:48    

Ce n'est pas une bonne méthode, parce que tes grille[i] sont éparpilées (problème de cohérence de cache).
 
Alloue un block grille = COLONNE*sizeof grille[0]
Alloue un block p = LIGNE*COLONNE*sizeof grille[0][0], et ensuite tu remplis grille[x] = p + c * COLONNE

Reply

Marsh Posté le 02-03-2009 à 08:18:48    

j'ai deja vu ça quelque part :D

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed