gpt4 book ai didi

c - 为什么这个结构初始化不起作用(不能返回局部变量的地址)

转载 作者:太空宇宙 更新时间:2023-11-04 05:10:17 25 4
gpt4 key购买 nike

Node *create_node() {
Node node = malloc(sizeof(Node));
node.cargo = next_free_cargo++;
return &node;
}

我以为 malloc 在堆上创建东西?为什么这仍然被认为是局部变量?

另外,这是正确的方法吗?

Node *create_node() {
Node *node = malloc(sizeof(Node*));
node->cargo = next_free_cargo++;
return node;
}

当我读到它时,这会为指向节点的指针创建内存。但是它如何为节点本身分配内存呢?

最佳答案

I thought malloc created things on the heap? Why is this still considered a local variable?

malloc()动态分配内存并将分配内存的生命周期控制权交给程序员(直到在返回的指针上调用 free())。但是,这段代码是不正确的(编译器应该有 emitted an error ):

Node node = malloc(sizeof(Node));

as node 不是 指针,并且分配在堆栈上,因此编译器警告它是局部变量。更改为:

Node* node = malloc(sizeof(Node)); /* or malloc(sizeof(*node)); */
if (node)
{
node->cargo = next_free_cargo++;
}
return node;

Also, is this the correct way?

第二个片段也不正确,因为它只在需要为 Node 分配内存时为 Node* 分配足够的内存。

关于c - 为什么这个结构初始化不起作用(不能返回局部变量的地址),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17527376/

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