在推动全局链接列表 *时有错误 *有时(随机) *



我创建了一个全局链接列表。有时不起作用。第一次推动总是成功完成,但第二次推动有时会出错。我在另一台计算机上尝试了。

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。它并不总是堆栈的顶部。

相关内容

最新更新