Comment allouer dynamiquement un tableau de chaînes de caractères en C?

Si j’ai le nombre d’éléments dans une variable appelée « n » et une variable appelée « size » qui est la taille de chaque élément, comment allouer dynamiquement un tableau appelé « tab » ?

Il s’agit d’un tableau de chaînes de caractères en C, pas en C++.

Merci de votre aide !

REMARQUE : mes exemples ne vérifient pas les retours NULL de malloc()… vous devriez vraiment le faire pourtant ; il y aura un crash si vous essayez d’utiliser un pointeur NULL.

Tout d’abord, vous devez créer un tableau de pointeurs char, un pour chaque chaîne (char *) :

char **tab = malloc(totalstrings * sizeof(char *));

Ensuite, vous devez allouer de l’espace mémoire à chaque chaîne de caractères :

int i;
for (i = 0; i < n; ++i) {
    tab[i] = (char *)malloc(size+1);
}

Quand vous avez fini d’utiliser le tableau, vous devez libérer chacun des pointeurs que vous avez alloués en utilisant la méthode free(). En d’autres termes, il faut parcourir le tableau en appelant la méthode free() sur chacun de ses éléments, et enfin free(array).

La formule courante pour allouer un tableau N par M de n’importe quel type T est la suivante:

T **tab = malloc(N * sizeof *tab);
if (tab)
  for (i = 0; i < N; i++)
    tab[i] = malloc(M * sizeof *tab[i]);
char** tableau = (char**)malloc(n * sizeof(char *));

for( i=0; i<n; i++ ) {
  tableau[i] = (char *)malloc(size+1);
}