Programmation en c

walamefteh Messages postés 35 Date d'inscription   Statut Membre Dernière intervention   -  
 le père -
Bonjour,
salut j'ai un exercice qui demande d'écrire un programme qui afffiche une matrice en trois dimensions
j'ai essayé et j'éspére que tu peux me corriger.voila mon travail


#include<stdio.h>
#include<stdlib.h>
void main()

{ int *** allocation (int l,int c,int z);
int l,c,z;
printf("Donner le nombre de lignes:");
scanf("%i",&l);
printf("Donner le nombre de lignes:");
scanf("%i",&c);
printf("Donner le nombre de lignes:");
scanf("%i",&z);
*** allocation (l,c,z);
}
int *** allocation (int l,int c ,int z)
{
int ***t,i;
t=(int***)malloc(l*sizeof(int **));
for(i=0;i<l;i++)
**(t+i)=(int*)(malloc(c*sizeof(int*)));
for(i=0;i<c;i++)
*(t+i)=(int**)malloc(z* sizeof(int));
return t;
}

1 réponse

le père
 
Bonjour

*** allocation (l,c,z);
Je ne crois pas que cette ligne veuille dire grand chose. Je suppose que tu voulias faire :

int *** tableau;
tableau =allocation (l,c,z);

Mais pourqui te compliquer l'existence ? Un seul tableau = malloc (l*c*z,sizeof(int)); fait l'affaire, à condition d'accéder aux éléments du tableau par tableau[ligne+c*(colonne+z*couche)]. La désallocation de la mémoire est évidente.

Si tu tiens à tes pointeurs de pointeurs de pointeurs, ta fonction d'allocation me semble bien bizarre. Je ferais plutôt
int *** allocation (int l,int c ,int z) { 
int ***t,i,j; 
  t=(int***)malloc(l*sizeof(int **)); 
  for(i=0;i<l;i++) {
    *(t+i)=(int**)(malloc(c*sizeof(int*)));
    for (j=0; j<c;j++)
      *(*(t+i)+j)=(int*) malloc(z*sizeof(int));
  } // for i
  return t;
} // allocation

et là tu accèdes aux éléments par tableau[ligne][colonne][couche], ce qui est bien sûr plus agréable
Mais tu vas t'arracher les cheveux (ou re-poster ici ;-) ) avant de faire une désallocation correcte !
0