Bonjour,

Je veut éclater une chaîne de caracteres, pour cela j'alloue dynamiquement un: char ** pp_tab:

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
 
   i = 0;
   while ((tmp_word = strtok (tmp_str2, " ")) != NULL)
   {
      /* Allocation/Reallocation du tableau */
      p_tmp = realloc (pp_tab, (i + 1) * sizeof (*pp_tab));
 
      if (p_tmp == NULL)
      {
         err = 1;
         break;
      }
 
 
      /* Mise a jour du pointeur. */
      pp_tab = p_tmp;
 
 
      /* Affectation du mot au tableau. */
      pp_tab[i] = malloc ((sizeof (**pp_tab) * strlen (tmp_word)) + 1);
 
      if (pp_tab[i] == NULL)
      {
         err = 1;
         break;
      }
 
      strcpy (pp_tab[i], tmp_word);
      pp_tab[i][strlen (tmp_word)] = '\0';
 
 
      tmp_str2 = NULL;
      i++;
   }
   pp_tab[i] = NULL;
Pour la libération, je procède de cette manière:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
 
   i = 0;
   printf ("Suppression du tableau:\n");
   while (tab[i] != NULL)
   {
      free (tab[i]);
      i++;
   }
   free (tab);
Mais voilà le problème lors de l'exécution:

*** glibc detected *** free(): invalid pointer: 0x0804c258 ***
Abandon
Où me suis-je trompé ?
Merci d'avance

PS: Dans mon test, j'ai 11 chaine d'allouée dans le tableau et j'ai pu constater que le problème viens lors de la liberation de la 10°, donc 2 avant celle qui vaut NULL..Cependant, je n'ai aucun problème lorsque parcours le tableau pour visionner le contenu !