如何在c中创建一个结构的新实例

时间:2015-02-08 22:01:14

标签: c struct malloc dynamic-memory-allocation

我是C的新手,因此仍在努力学习语言。我在头文件中创建了一个链表结构,我正在尝试创建这个结构的新实例。我知道在java中你可以使用new运算符,但我如何在c中模仿这种行为?传统上我会想到以下几点:

在linked.h中的代码

typedef struct linked_list{
//assuming node type is implemented
node *next_node; 
}

linked.c中的代码

linked_list *link = NULL;
link = malloc(number_nodes);
link->node_value = 10;

您可以提供的任何帮助对我非常有帮助,因为我无法理解这个概念。

2 个答案:

答案 0 :(得分:3)

malloc需要知道要分配多少个字节,因此您需要将节点数乘以一个节点的大小(以字节为单位)。

更改:

link = malloc(number_nodes);

link = malloc(number_nodes * sizeof(*link));

或者,如果您只想要一个结构:

link = malloc(sizeof(*link));

答案 1 :(得分:2)

如果你想为一个struct linked_list留出足够的内存,你所要做的就是

struct linked_list * mylist = malloc(sizeof(*mylist));
mylist -> next_node = NULL;

对于您要添加的每个节点,您必须执行

struct node * mynewnode = malloc(sizeof(*mynewnode));
mynewnode -> ... = ...; // fill in the data you have
mynewnode -> next_node = mylist -> next_node;
mylist -> next_node = mynewnode;

你应该保持所有节点的内存彼此独立,这样你就可以释放它们。