Quand je fais tourner valgrind, il me trouve de la memoire non desalloue y compris de la memoire qui n'est plus accessible. Clairement c'est une partie de ton probleme.
Ensuite ton probleme principale vient de ta mal comprehension de la fonction strtok. Affiche les valeures des pointeurs passe en parametre et retourne. Tu vera que les addresses sont en collisions.
C'est decrit dans le manuel de strtok (je te laisse le lire en details). strtok modifie le contenue de la chaine pour ajouter des \0 la ou il y a un delimiteur.