Bonjour,
Je sais comment faire un tableau à deux dimensions en passant par malloc, mais je ne sais pas comment m'y prendre pour faire un tableau à trois dimensions.
Quelqu'un peut-il m'expliquer ?
Merci d'avance
Bonjour,
Je sais comment faire un tableau à deux dimensions en passant par malloc, mais je ne sais pas comment m'y prendre pour faire un tableau à trois dimensions.
Quelqu'un peut-il m'expliquer ?
Merci d'avance
meme chose..
Tu as 2 solutions : soit faire l'allocation profondeur puis hauteur puis largeur (enfin les 3 D, quoi), soit tu fais une seule alloc et tu geres les indices :
ou
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45 double ***tab; tab = malloc (n*sizeof(double**)); if ( tab != NULL ) { for ( i = 0 ; i < n ; i++ ) { tab[i] = malloc(m*sizeof(double*)); if ( tab[i]] == NULL ) { if ( i > 0 ) for ( j = (i-1) ; j >= 0 ; j-- ) free(tab[i]); free(tab); return 1 ; } for ( j = 0 ; j < m ; j++ ) { tab[i][j] = malloc ( l * sizeof(double)); if ( tab[i][j] == NULL ) { if ( j > 0 ) for ( k = (j-1) ; k >= 0 ; k-- ) free(tab[i][k]); for ( j = i ; j >= 0 ; j-- ) { for ( k = (m-1) ; k >= 0 ; k-- ) free(tab[i][k]); free(tab[i]); } free(tab); return 1 ; } } return 0 ; } else return 1 ; }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 double *tab; tab = malloc ((n*m*l)*sizeof(double)); if ( tab != NULL ) { for ( i = 0 ; i < n ; i++ ) { iy = i* (m*l) ; for ( j = 0 ; j < m ; j++ ) { ix = j*(l); for ( k = 0 ; k < l ; k++ ) { idx = iy +ix + k ; tab[idx] = .... ; } } } }
Merci encore une fois Souviron34
En fait, j'ai trouvé une solution par moi même.
A titre d'info, ça donne ça pour un tableau de double !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31 // Avec nx, ny et nz les 3 dimensions du tableau double ***Table3D; Table3D = malloc(nx * sizeof(double**)); if(Table3D == NULL) { fprintf(stderr, "out of memory\n"); system("PAUSE"); exit(0); } for(i = 0; i < nx; i++) { Table3D[i] = malloc(ny * sizeof(double*)); if(Table3D[i] == NULL) { fprintf(stderr, "out of memory\n"); system("PAUSE"); exit(0); } for (j = 0; j < ny; j++) { Table3D[i][j] = malloc(nz * sizeof(double)); if(Table3D[i][j] == NULL) { fprintf(stderr, "out of memory\n"); system("PAUSE"); exit(0); } } }
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager