我试图在链表的尾端插入一个节点。但是当我移动尾指针指向新节点时,我收到了分段错误的错误。
此外,我无法打印尾部下一个值的当前值,该值应为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上运行相同的代码时没有收到任何错误。
请帮我解决这个问题。
答案 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解除引用并将其分配给指针,将字节转换为指针,并将其作为内存地址读取,段错误(不同大小) ,坏内存地址等)。