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 :

Connaitre la taille d'un tableau dynamique


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau candidat au Club
    Inscrit en
    Septembre 2005
    Messages
    1
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 1
    Par défaut Connaitre la taille d'un tableau dynamique
    Bonjour.

    Je souhaiterais connaitre la taille d'un tableau dynamique. Voici ce que j'ai trouvé dans la FAQ à ce sujet, mais sincèrement, je pense avoir atteint mes limites en C puisque je ne vois pas très bien ce que je peux faire avec ça. Merci à ceux qui pourront m'aider à y voir plus clair.

    Le bout de code en question dont la description est la suivante :

    Il n'existe pas en C de fonction permettant de connaître la taille d'un tableau alloué dynamique, il faut donc impérativement conserver cette taille. Voici un petit bout de code gérant une "pseudo-classe" vecteur et fournissant une fonction d'allocation, de désallocation et de récupération de la taille du tableau (en nombre d'éléments).

    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
    // TYPE est à remplacer par le type de ton choix
    #define TYPE int
     
    typedef struct
    {
      unsigned long size;
      TYPE *liste;
    } vector;
     
    void vector_new (vector *v, unsigned long size)
    {
      v -> size = size;
      v -> liste = malloc(size * sizeof *(v->liste));
    }
     
    void vector_delete (vector *v)
    {
      free (v -> liste);
      v -> liste = NULL;
      v -> size = 0;
    }
     
    unsigned long vector_size(vector *v)
    {
      return v -> size;
    }

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    128
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 128
    Par défaut
    Eh bien, comme dit dans le bout de la FAQ que tu cites, en C il n'existe pas de "méthode" pour récupérer la taille d'un tableau dynamique. Donc l faut garder cette taille en mémoire.
    Un tableau dynamique est en principe construit avec des fonctions malloc/calloc, dans lesquelles on donne la longeur du tableau à construire. Si tu veux réutiliser cette longeur, il faut alors la garder dans un coin
    Le code que tu montres correspond à une implementation d'un type vector, qui désigne ici une structure englobant un tableau liste et sa taille size. Les trois fonctions qui suivent permettent d'effectuer quelques opérations de base sur ce type : créer un nouveau vector, en supprimer un et récupérer sa taille.
    Cette implementation a l'avantage de "relier" ensemble le tableau et sa taille. Maintenant, rien ne t'empêche de manipuler le tableau et la taille comme deux variables séparées...

  3. #3
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut Re: Connaitre la taille d'un tableau dynamique
    Citation Envoyé par lewellah
    Je souhaiterais connaitre la taille d'un tableau dynamique.
    C'est à celui qui a fait l'allocation de noter la taille quelquepart. Je recommande une structure
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    struct tab
    {
       T *a;
       size_t size;
    }
    Voici ce que j'ai trouvé dans la FAQ à ce sujet, mais sincèrement, je pense avoir atteint mes limites en C puisque je ne vois pas très bien ce que je peux faire avec ça. Merci à ceux qui pourront m'aider à y voir plus clair.

    Le bout de code en question dont la description est la suivante :

    Il n'existe pas en C de fonction permettant de connaître la taille d'un tableau alloué dynamique, il faut donc impérativement conserver cette taille. Voici un petit bout de code gérant une "pseudo-classe" vecteur et fournissant une fonction d'allocation, de désallocation et de récupération de la taille du tableau (en nombre d'éléments).

    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
    // TYPE est à remplacer par le type de ton choix
    #define TYPE int
     
    typedef struct
    {
      unsigned long size;
      TYPE *liste;
    } vector;
     
    void vector_new (vector *v, unsigned long size)
    {
      v -> size = size;
      v -> liste = malloc(size * sizeof *(v->liste));
    }
     
    void vector_delete (vector *v)
    {
      free (v -> liste);
      v -> liste = NULL;
      v -> size = 0;
    }
     
    unsigned long vector_size(vector *v)
    {
      return v -> size;
    }
    Cet exemple est limpide. Qu'est-ce que tu ne comprends pas ?

    On a un mécanisme de gestion de tableau d'int qui fonctionne comme ça :
    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
     
    int main (void)
    {
       vector v;
     
       vector_new (&v, 12);
     
       unsigned long i;
     
       for (i = 0; i < vector_size (&v); i++)
       {
          v.liste[i] = i + 1;
       }
     
       for (i = 0; i < vector_size (&v); i++)
       {
          printf ("v[%lu] = %d\n", i, v.liste[i]);
       }
     
       vector_delete (&v);
       return 0;
    }
    qui donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    v[0] = 1
    v[1] = 2
    v[2] = 3
    v[3] = 4
    v[4] = 5
    v[5] = 6
    v[6] = 7
    v[7] = 8
    v[8] = 9
    v[9] = 10
    v[10] = 11
    v[11] = 12
    Personellement, j'irais beaucoup plus loin dans l'abstraction[1], mais c'est un bon début

    ------------------------
    [1] http://emmanuel-delahaye.developpez.com/clib.htm
    Module FARR (Flexible ARRay)

Discussions similaires

  1. Comment récupérer la taille d'un tableau dynamique ?
    Par Tchaill39 dans le forum Langage
    Réponses: 4
    Dernier message: 08/12/2005, 14h21
  2. [Tableaux] Comment connaitre la taille d'un tableau?
    Par Polaire76 dans le forum Langage
    Réponses: 2
    Dernier message: 21/11/2005, 17h34
  3. Connaitre la taille d'un tableau
    Par Natim dans le forum C++
    Réponses: 17
    Dernier message: 10/10/2005, 17h53
  4. Connaitre la taille d'un tableau dyn
    Par seal3 dans le forum C++
    Réponses: 13
    Dernier message: 24/08/2005, 20h25
  5. [Tableau]comment connaitre la taille d'un tableau à 2 dimensions
    Par Kyti dans le forum Collection et Stream
    Réponses: 4
    Dernier message: 22/04/2005, 10h27

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