使用双指针时出现分段错误

时间:2013-09-20 03:12:26

标签: gcc

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

此外,我无法打印尾部下一个值的当前值,该值应为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上运行相同的代码时没有收到任何错误。

请帮我解决这个问题。

2 个答案:

答案 0 :(得分:1)

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

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

几乎肯定有太多的解构。类似的东西:

(*tail)->next = new_node;

对于struct node来说更为正常,看起来像是:

struct node {
    int data;
    struct node *next;
};

答案 1 :(得分:1)

您没有正确解除引用:

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

相同

应该是:

(*tail)->next = newNode;

或者

(**tail).next = newNode;

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