我已经看过与此类似的帖子,但我发现了一些差异,这让我走上了错误的道路。
我有这个代码:
char * token_one = strtok(my_buffer, " ,.-");
char * token_two = strtok(NULL, " ,.-");
free(token_one);
free(token_two);
我看到有人说与 strtok 一起使用的变量不应被释放,但为什么在执行此代码时我得到了这个:
免费(token_one)
没有错误
free(token_two)
我收到“无效指针”
为什么我在 free(token_one)
中没有收到错误消息?处理这个问题的正确方法是什么?
最佳答案
如果你看看 strtok()
是如何工作的,你就会立刻明白:
- 第一次调用
strtok()
返回给定的指针,通过用 NUL 字节替换下一个分隔字符来修改它指向的字符串。 - 使用
NULL
作为第一个参数完成的任何后续调用都会对之前保存的指针进行操作,该指针指向被替换字符之后的指针。
因此,如果您的 my_buffer
来自 malloc()
,则第一个 free()
调用会成功。第二个失败了,因为,为什么不呢?它不是来自 malloc()
等,因此对其调用 free()
是未定义的行为。
关于与 strtok 一起使用的 C 自由变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57693646/