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 :

int *** tzbleau_3D


Sujet :

C

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 18
    Points : 10
    Points
    10
    Par défaut int *** tzbleau_3D
    bonjour comment allouer la mémoire pour un tableau 3 D?

  2. #2
    Membre expert Avatar de KiLVaiDeN
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 851
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 851
    Points : 3 481
    Points
    3 481
    Par défaut
    Salut,

    En calculant le nombre d'éléments de ton tableau * la taille d'une cellule

    Ou je ne comprend pas bien ta question ?
    K

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 18
    Points : 10
    Points
    10
    Par défaut
    non je voulais savoir avoir les malloc car je ne connais pas au départ la taille de mon tableau;
    int *** tableau_3D;
    et j'ai par exemple hauteur , largeur, profondeur comme dimentions
    Quelles boucles avec malloc dois je faire?

  4. #4
    Rédacteur

    Avatar de gege2061
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2004
    Messages
    5 840
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juin 2004
    Messages : 5 840
    Points : 11 625
    Points
    11 625
    Par défaut
    Bonjour,
    le principe est le même qu'avec 2 dimensions :
    Comment allouer dynamiquement un tableau à 2 dimensions ?

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 18
    Points : 10
    Points
    10
    Par défaut
    alors pour un 3-D je dois ajouter dans le boucle de i une boucle j :
    //1D
    tab = malloc ( sizeof(*tab) * taille);
    //2D
    for (i=0; i<taille; i++)
    {
    tab[i] = malloc ( sizeof(**tab) * taille2);
    //3D
    for (j=0; j<taille; j++)
    tab[i] [j]= malloc ( sizeof(**tab) * taille3);
    }

    ??? C'EST ÇA?

  6. #6
    Expert éminent sénior

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    Lorsqu'on fait de l'allocation dynamique, il faut toujours faire des tests sur le retour de la fonction malloc. C'est une erreur grave de ne pas le faire...

    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
    46
    47
    48
    49
    50
    51
    int ***allocation(int premdim, int deuxdim, int troisdim)
    {
    int i,j,k;
    int ***res;
     
    //1ere dimension
    res = (int ***) malloc(sizeof(int**) * premdim);
    if(res==NULL)
      return NULL;
     
    //2ere dimension
    for(i=0;i<premdim;i++)
      {
      printf("%d\n",i);
       res[i] = (int **) malloc(sizeof(int *) * deuxdim);
     
       if(res[i] == NULL)
         {
           //Probleme on libére la mémoire
           for(; i>=0;i--)
             free(res[i]);
           free(res);
           return NULL;
         }
     
      //2eme dimension
      for(j=0;j<deuxdim;j++)
        {
     
        res[i][j] = (int *) malloc(sizeof(int) * troisdim);
     
        //Si probleme
        if(res[i][j] == NULL)
          {
          //On libere la memoire
          for(;j>=0;j--)
             free(res[i][j]);
          for(i=0;i<premdim;i++)
             free(res[i]);
          free(res);
          return NULL;
          }
     
        //Initialisation à 0
        for(k=0;k<troisdim;k++)
             res[i][j][k] = 0;
       }
      }
     
    return res;
    }

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 18
    Points : 10
    Points
    10
    Par défaut
    merci beucoup tout le monde qui m'a répondu

  8. #8
    Expert éminent sénior
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Points : 13 926
    Points
    13 926
    Par défaut
    Le même en un peu plus court avec le code de destruction:
    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
    int *** CreerTab(int dim1, int dim2, int dim3)
    {
      int i;
      int * p = malloc(dim1*dim2*dim3*sizeof(int));
      int **pp = malloc(dim1*dim2*sizeof(int*));
      int *** tab = malloc(dim1*sizeof(int**));
      if(p==NULL || pp==NULL|| tab ==NULL)
      {
        free(p);
        free(pp);
        free(tab);
        return NULL;
      }
      for(i=0; i<dim2*dim1;i++) pp[i] = p+i*dim3;
      for(i=0; i<dim1;i++) tab[i] = pp+i*dim2;
      return tab;
    }
    void DetruireTab(int*** Tab)
    {
      free(Tab[0][0]);
      free(Tab[0]);
      free(Tab);
    }
    ....
       int*** tab;
      tab = CreerTab(2,3,5);
    .....
      tab[1][2][3] = 12345;
      tab[0][1][2] = 789;
    ....
      DetruireTab(tab);
    Publication : Concepts en C

    Mon avatar : Glenn Gould

    --------------------------------------------------------------------------
    Une réponse vous a été utile ? Remerciez son auteur en cliquant le pouce vert !

  9. #9
    Expert éminent sénior

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    int * p = malloc(dim1*dim2*dim3*sizeof(int));
    Faut-il encore pouvoir faire l'allocation... Pas toujours possible. Ma solution découpe la mémoire en plusieurs sous-blocs...

    Mais je suis d'accord avec ta solution...

Discussions similaires

  1. [.COM] Réserver de la RAM fct 48h int 21h
    Par bulerias dans le forum x86 16-bits
    Réponses: 5
    Dernier message: 06/12/2010, 14h33
  2. calcul melangeant int et long int ?
    Par ThR dans le forum C
    Réponses: 2
    Dernier message: 06/01/2003, 01h13
  3. [Dev c++ 4] implicite declaration of function "int kbhi
    Par Torpedox dans le forum Dev-C++
    Réponses: 5
    Dernier message: 01/01/2003, 13h37
  4. "ALTERER" une col. NULL en NOT NULL - Int
    Par Gandalf24 dans le forum SQL
    Réponses: 2
    Dernier message: 28/12/2002, 00h07
  5. Les INT en mode protégé
    Par le mage tophinus dans le forum x86 16-bits
    Réponses: 8
    Dernier message: 05/12/2002, 16h13

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