正确的释放记忆的方法

时间:2011-05-12 13:00:54

标签: c memory-management malloc free

因为我已经做了一些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
}

谢谢。

5 个答案:

答案 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)。因为应用程序即将结束,您不再需要任何指针。