2

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

4

2 回答 2

4

不,从本质上讲,free()需要自由写入给定的内存,做“簿记”。这就是为什么它被定义为采用非const指针的原因。

正如其他人指出的那样,这并不意味着它不能工作。C 可以const去掉指针的 -ness 并让函数像在没有 . 的情况下调用它一样运行const。编译器会在发生这种情况时发出警告,这就是为什么我认为它“引起问题”。

于 2010-05-03T12:12:14.070 回答
1

如果指针被分配是。你会得到一个警告,但你在分配它时已经得到了一个。

const char *当我想确保在分配和释放之间没有人写入它们时,我经常在我的结构中使用。通常情况下,您动态创建一个在其生命周期内不可变的字符串,如果您使用具有副作用的函数 ( strtok) 调用它,您可能会遇到麻烦。通过声明它,const您至少可以在这种情况下得到警告。

const char *msg;

asprintf((char *)&msg, "whatever" ...);
...
strtok(msg, ",");     // Will generate a warning 
...
free((char*)msg);
于 2010-05-03T12:19:21.770 回答