我可以free
使用const char*
吗?这会导致任何问题吗?
答案 0 :(得分:4)
没有。按照它的本质,free()
需要自由写入给定的记忆,做“簿记”。这就是为什么它被定义为采用非const
指针。
正如其他人所指出的那样,这并不意味着它无法运作; C可以删除指针的const
- 并让函数像没有const
的情况一样运行。编译器会在发生这种情况时发出警告,这就是为什么我认为它会“导致问题”。
答案 1 :(得分:1)
如果指针分配为yes。你会得到一个警告,但是你已经分配了它。
当我想确保在分配和发布之间没有人写入时,我经常在我的结构中使用const char *
。通常情况下,您动态创建一个在其生命周期内不可变的字符串,如果您使用具有副作用的函数(strtok
)调用它,则可能会遇到麻烦。通过声明它const
,你至少可以在这种情况下得到警告。
const char *msg;
asprintf((char *)&msg, "whatever" ...);
...
strtok(msg, ","); // Will generate a warning
...
free((char*)msg);