可以`const char *`导致问题?

时间:2010-05-03 12:10:15

标签: c memory-management free

我可以free使用const char*吗?这会导致任何问题吗?

2 个答案:

答案 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);