我创建了一个全局链接列表。有时不起作用。第一次推送总是成功完成,但是第二次推送有时会出错。我在另一台计算机上尝试过,但是相同。
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;
}
答案 0 :(得分:2)
代码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
的类型,使用malloc
也会为new_node指向的内容自动分配足够的空间。top new_node = malloc(sizeof *new_node);
的类型。该代码可以为struct person
。top
来指向markers
的指针。它并不总是堆栈的顶部。