[英]Correct way to free memory
因为我已经做了一些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
}
谢谢。
不,你不想调用free()
,因为你从来没有malloc()
ed数据。 更具体地说,在指向字符串文字的指针上调用free()
导致未定义的行为 。
在这种情况下,你根本不应该自由。 free()
应始终对应于对malloc()
函数的调用。
在这里,你可以“释放”从未首先分配的常量内存。
在这段代码中有些东西让我感到困惑。
为什么评论说“str已被分配足够的字节用于以下文本”? 即使已经分配了,你也要为指针分配一个新值,所以它不会给你带来任何分配了那个内存的东西。
无论如何,根据这段代码,不应该调用free()
。
你没有在你的代码中显示,但你写的str已经分配了足够的字节。 所以这很好,并且可以free
编辑,但是将指针指向常量字符串为str - *str = "allocate some text";
(正如oli所说,在free上导致未定义的行为)而不是执行strcpy()
:
strcpy(str, "allocate some text");
首先应该调整方法foo的调用,因为参数不匹配。 它应该看起来像
foo(&someString);
但就个人而言,我会同意你free(someString)
调用方法的地方free(someString)
。 因为应用程序即将结束,您不再需要任何指针。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.