use*_*408 -3 c pointers strtok undefined-behavior invalid-pointer
我已经看到过类似的帖子,但是我发现了一些差异,使我误入歧途。
我有以下代码:
char * token_one = strtok(my_buffer, " ,.-");
char * token_two = strtok(NULL, " ,.-");
free(token_one);
free(token_two);
Run Code Online (Sandbox Code Playgroud)
我看到有人在帖子中说不应释放与strtok一起使用的变量,但是为什么在执行此代码时却得到此信息:
free(token_one) 没有错误
free(token_two)我得到“ 无效指针 ”
为什么我没有收到错误消息free(token_one)?处理此问题的正确方法是什么?
如果您查看其strtok()工作原理,将立即清楚:
strtok()返回给定的指针,通过用NUL字节替换下一个分隔字符来修改其指向的字符串。NULL第一个参数作为参数)都对保存的指针进行操作,指针从该指针之前指向被替换字符之后的指针。So the first free() call succeeds iff your my_buffer came from malloc(). The second one fails because, well, why shouldn't it? It doesn't come from malloc() et al., so calling free() on it is undefined behaviour.