繁体   English   中英

正确的释放记忆的方法

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM