Node *create_node() {
Node node = malloc(sizeof(Node));
node.cargo = next_free_cargo++;
return &node;
}
我以为马洛克在堆上创造了东西?为什么这仍然被视为局部变量?
另外,这是正确的方法吗?
Node *create_node() {
Node *node = malloc(sizeof(Node*));
node->cargo = next_free_cargo++;
return node;
}
当我阅读它时,这会为指向节点的指针创建内存。 但是它如何为节点本身分配内存呢?
我以为马洛克在堆上创造了东西?为什么这仍然被视为局部变量?
malloc()
确实动态分配内存,并将所分配内存的生存期的控制权交给程序员(直到在返回的指针上调用free()
(。但是,此代码不正确(编译器应该发出错误(:
Node node = malloc(sizeof(Node));
由于node
不是指针,因此在堆栈上分配,因此编译器警告它是局部变量。更改为:
Node* node = malloc(sizeof(Node)); /* or malloc(sizeof(*node)); */
if (node)
{
node->cargo = next_free_cargo++;
}
return node;
另外,这是正确的方法吗?
第二个片段也是不正确的,因为它只为Node*
分配足够的内存,当它需要为Node
分配内存时。
这是正确的方法:
Node *create_node() {
Node *node = malloc(sizeof(Node));
node->cargo = next_free_cargo++;
return node;
}
malloc 函数分配一个大小(节点(字节的内存缓冲区,并返回指向该内存区域的指针。内存在堆上分配,可以在从函数返回后引用。此外,当不再需要时,应该释放它的内存。