Bonjour,
Je veut éclater une chaîne de caracteres, pour cela j'alloue dynamiquement un: char ** pp_tab:
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
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;
Mais voilà le problème lors de l'exécution:
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);
Où me suis-je trompé ?*** glibc detected *** free(): invalid pointer: 0x0804c258 ***
Abandon
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 !
Partager