我创建了一个全局链接列表。有时不起作用。第一次推动总是成功完成,但第二次推动有时会出错。我在另一台计算机上尝试了。
typedef struct person{
char name[20];
char surname[20];
char musical_Work[20];
int age;
struct person *next;
}*top;
top head=NULL; /* GLOBAL */
void addNode( /* datas */ ){
top new_node=(top)malloc(sizeof(top));
/* copying datas */
new_node->next=head;
head=new_node;
}
代码top new_node=(top)malloc(sizeof(top));
为top
分配足够的空间,这是struct person
的指针。但是,该空间将用于容纳struct person
,因此必须为struct person
分配足够的空间。因此,正确的代码是:
top new_node=(top)malloc(sizeof(struct person));
另外:
- 使用
sizeof *new_node
自动分配足够的空间,即使在编辑代码时更改了new_node
的类型。
。
- 在C中,无需施放
malloc
的类型。此代码可以是top new_node = malloc(sizeof *new_node);
。 - 考虑使用其他名称作为
struct person
的指针,而不是top
。它并不总是堆栈的顶部。