IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C Discussion :

Tableau à trois dimensions et malloc


Sujet :

C

  1. #1
    Membre à l'essai
    Inscrit en
    Mars 2008
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 18
    Points : 13
    Points
    13
    Par défaut Tableau à trois dimensions et malloc
    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

  2. #2
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Points : 17 923
    Points
    17 923
    Billets dans le blog
    2
    Par défaut
    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 :

    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 ;
    }
    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
     
    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] = .... ;
                }
             }
         }
    }

  3. #3
    Membre à l'essai
    Inscrit en
    Mars 2008
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 18
    Points : 13
    Points
    13
    Par défaut
    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);
                    }
                }
    	}

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème malloc() tableau 3 dimensions
    Par Hyris dans le forum C
    Réponses: 14
    Dernier message: 05/06/2008, 19h30
  2. Réponses: 1
    Dernier message: 06/04/2007, 11h38
  3. Tableau à 2 dimensions avec utilisation de MALLOC
    Par johnalias110 dans le forum C
    Réponses: 3
    Dernier message: 28/02/2007, 18h54
  4. créer un tableau 2 dimensions avec Malloc
    Par nimportekoi dans le forum C
    Réponses: 14
    Dernier message: 15/11/2006, 13h01
  5. Tableau a trois dimension!!!
    Par krfa1 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 03/10/2005, 15h52

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo