推送全局链接列表时出现错误*有时(随机)*

时间:2019-05-11 10:48:29

标签: c

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

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;  
}

1 个答案:

答案 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指向的内容自动分配足够的空间。
  • 在C中,无需强制转换top new_node = malloc(sizeof *new_node);的类型。该代码可以为struct person
  • 请考虑使用其他名称代替top来指向markers的指针。它并不总是堆栈的顶部。