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:
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;
} |
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:
1 2 3 4 5 6
|
struct tab
{
T *a;
size_t size;
} |
Citation:
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:
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:
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:
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)