gpt4 book ai didi

c - 分配了 malloc 返回值的指针是否也需要 malloc

转载 作者:太空宇宙 更新时间:2023-11-04 08:22:01 27 4
gpt4 key购买 nike

总体问题:当您将通过malloc分配的返回值分配给一个指针时,您是否需要malloc该指针以及,还是您可以简单地声明并分配它?

例如,假设我有一个函数 foo,它在执行过程中使用 malloc 创建了一个 char * 并且赋值。然后该函数返回该 char *。如果在另一个函数中(示例中的 main)我想设置一个不同的 char * 等于 foo 的结果,我是否必须malloc 那个新变量也是这样吗?或者我可以跳过额外的 malloc 调用并保留 foo 中分配的值吗?

char* foo (char *someVal) {
/* other code happens */

char *result = malloc((strlen(someVal)+1) * sizeof(char));
strncpy(result, someVal, strlen(someVal);
result[strlen(someVal)] = '\0';
return result;
}

int main (int argc, char **argv) {
char *s = "xxxx";

// Version 1: doing malloc first:
char *manip1 = malloc(25 * sizeof(char));
manip1 = foo(s);

//Version 2: skipping malloc and directly assigning:
char *manip2 = foo(s);

/* perform some operation on manip */
}

所以看看这个例子,我可以简单地完成上述代码的版本 2,还是必须执行版本 1

最佳答案

您不必(也不应该)预先分配空间。指针就是指针。它可以指向任何东西,包括它不应该指向的东西(即单元化指针)。

举个例子:假设您指着一所房子。一定要自己有房子才能指别人的吗?你可以指向任何你想要的地方。以类似的方式,在指向其他人的内存之前,您不必拥有内存。

在您的示例中,版本 1 会造成内存泄漏,因为您不再有任何方法来引用最初分配的内存。版本 2 是正确的。

关于c - 分配了 malloc 返回值的指针是否也需要 malloc,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33029096/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com