Comment utiliser strtok dans C correctement donc il n'y a pas de fuite de mémoire?

Je suis un peu confus par ce qui se passe lorsque vous appelez strtok sur un char pointeur en C. je sais qu'il modifie le contenu de la chaîne, de sorte que si je l'appelle strtok sur une variable appelée "ligne", son contenu va changer. Supposons que j'ai suivi le soufflet approche:

void function myFunc(char* line) {

    //get a pointer to the original memory block
    char* garbageLine = line;

    //Do some work
    //Call strtok on 'line' multiple times until it returns NULL
    //Do more work

    free(garbageLine);
}

Supposons que la "ligne" est malloced avant de passer à myFunc. Suis-je censé libérer la chaîne d'origine après l'utilisation de strtok ou faut-il faire le travail pour nous? Aussi, ce qui se passe si "ligne" n'est pas malloced et je tente d'utiliser la fonction ci-dessus? Est-il sécuritaire de faire ce qui suit à la place? (Suppose que le programmeur ne pas appeler gratuitement, s'il sait que la ligne n'est pas malloced)

Invocation

char* garbageLine = line;
myFunc(line);
free(garbageLine);

Définition de la fonction de

void function myFunc(char* line) {
    //Do some work
    //Call strtok on 'line' multiple times until it returns NULL
    //Do more work
}

source d'informationauteur user246392