Node *create_node() {
Node node = malloc(sizeof(Node));
node.cargo = next_free_cargo++;
return &node;
}
Run Code Online (Sandbox Code Playgroud)
我以为malloc在堆上创建了东西?为什么这仍然被认为是局部变量?
另外,这是正确的方法吗?
Node *create_node() {
Node *node = malloc(sizeof(Node*));
node->cargo = next_free_cargo++;
return node;
}
Run Code Online (Sandbox Code Playgroud)
在我阅读它时,这会为指向节点的指针创建内存.但是它如何为节点本身分配内存呢?
我以为malloc在堆上创建了东西?为什么这仍然被认为是局部变量?
malloc()动态分配内存并将分配的内存的生命周期控制给程序员(直到free()在返回的指针上调用).但是,此代码不正确(并且编译器应该发出错误):
Node node = malloc(sizeof(Node));
Run Code Online (Sandbox Code Playgroud)
因为node它不是指针,而是在堆栈上分配,因此编译器警告它是一个局部变量.改成:
Node* node = malloc(sizeof(Node)); /* or malloc(sizeof(*node)); */
if (node)
{
node->cargo = next_free_cargo++;
}
return node;
Run Code Online (Sandbox Code Playgroud)
另外,这是正确的方法吗?
第二个片段也是错误的,因为它只为a分配足够的内存Node*,当它需要为a分配内存时Node.