la fonction strtok fil de sécurité
J'ai passé quelque temps dans le débogage d'un programme qui donne de l'erreur de segmentation. Le bug est assez indeterministic et intermittente, ce qui est ennuyeux. J'ai rétréci vers le bas à l'appel de strtok()
. Je soupçonne que c'est la vocation de strtok()
à scinde une chaîne en deux threads différents qui provoque l'erreur de segmentation. Puis-je appeler strtok()
dans deux threads différents?
Grâce.
- S'il vous plaît ne pas baliser une question C++ quand il est en fait un C question.
Vous devez vous connecter pour publier un commentaire.
strtok()
n'est pas réentrant de sorte qu'il ne devrait pas être utilisé à partir de filetée applications, l'utilisation destrtok_r()
à la place.strtok()
n'est pas MT-safe, car il stocke certaines variables intermédiaires à l'échelle mondiale et de les réutiliser à chaque appel (voir, vous n'avez pas à passer de nouveau la chaîne chaque fois que vous appelezstrtok()
).Vous pouvez consulter les pages de manuel de méthodes que vous utilisez et il est toujours indiqué à la fin si c'est le MT-safe ou pas.
Lorsqu'une méthode n'est pas MT-safe (multi-thread-safe ou réentrant), vous devez rechercher la même méthode avec le suffixe _r sens reentrand. Dans votre exemple,
strtok_r()
comme suggéré dans l'autre réponse.