0

我试图在链表的尾部插入一个节点。但是当我移动尾指针指向新节点时,我收到了分段错误错误。

此外,我无法打印尾部下一个值的当前值,该值应该为 NULL。

我在mac环境中使用gcc。

 void insert_tail(int val,struct node **tail)
 {
    struct node *new_node=NULL;
    new_node=malloc(sizeof(*new_node));
    new_node->data=val;
    //printf("%p",(void*)*(*tail)->next);
    *(*tail)->next=*new_node;
    *tail=new_node;
 }

当我在 Visual C 上运行相同的代码时,我没有收到任何错误。

请帮我解决这个问题。

4

2 回答 2

1

您没有显示您的struct node定义,但是这一行:

*(*tail)->next=*new_node;

几乎可以肯定其中有太多的取消引用。就像是:

(*tail)->next = new_node;

会更正常,因为struct node它看起来像:

struct node {
    int data;
    struct node *next;
};
于 2013-09-20T03:17:36.753 回答
1

您没有正确取消引用:

*(*tail)->next = *newNode;

这与

应该:

(*tail)->next = newNode;

或者

(**tail).next = newNode;

现在你的 next 是一个指针,所以取消引用 newNode 是不准确的,bc 取消引用它并将其分配给一个指针,将字节转换为一个指针,并将其作为内存地址读取,段错误(不同大小,坏内存地址等)。

于 2013-09-20T03:23:40.133 回答