因为我已经做了一些C而花了一些时间我必须更新我对指针的理解。这是一个修改指针内容的函数。问题是这段代码是否正确。如果我只释放指针或者我必须释放指针的内容
就足够了void foo(char **str) {
// str has been allocated enough bytes for the following text
*str = "allocate some text";
}
int main(int arc, char *argv[]) {
char *someString;
foo(&someString);
free(someString); // is this the correct place to free
}
谢谢。
答案 0 :(得分:10)
不,您不想致电free()
,因为您从不malloc()
- 编辑数据。更具体地说,在指向字符串文字的指针上调用free()
会导致未定义的行为。
答案 1 :(得分:2)
在这种情况下你根本不应该自由。 free()
应始终对应于malloc()
函数的调用。
在这里,你“释放”从未首先分配的常量内存。
答案 2 :(得分:1)
这段代码让我感到困惑。
为什么评论说“str已为下列文本分配了足够的字节数 “?即使已经分配了,你也要为指针分配 一个新值,所以它不会给你带来任何已分配内存的东西。
无论如何,根据此代码,不应调用free()
。
答案 3 :(得分:1)
你没有在你的代码中显示,但你写的str已经被分配了足够的字节。所以没关系,可以free
编辑,但是将指向常量字符串的指针分配给str - *str = "allocate some text";
(并且正如oli所说,导致未定义的行为在free上)而不是执行{{1} }:
strcpy()
答案 4 :(得分:-2)
首先应该调整方法foo的调用,因为参数不匹配。它应该看起来像
foo(&someString);
但我个人同意你所谓的方法free(someString)
。因为应用程序即将结束,您不再需要任何指针。