C ++中链表实现中的分段错误
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C ++中链表实现中的分段错误相关的知识,希望对你有一定的参考价值。
我正在用C ++编写一个函数,将“int”类型的“数据”添加到链表的末尾。
void insert_back()
{
int no;
node *temp;
cout<<"
Enter the number"<<"
";
cin>>no;
temp = head;
if(temp != NULL)
{
while(temp != NULL)
temp = temp->next;
}
temp->next = (node*)malloc(sizeof(node));
temp = temp->next;
temp->data = no;
temp->next = NULL;
}
但是,在行,temp-> next =(node *)malloc(sizeof(node)),我得到一个访问冲突错误(分段错误)。我没有发现任何根本错误。你能否就这个问题赐教我?
答案
如果要获取列表的最后一个节点,只需检查下一个成员是否为null,因为最后一个节点的下一个成员为null。
在您的代码中,您检查temp是否为null而不是temp-> next。
while(temp != NULL)
temp = temp->next;
循环结束时,temp将为null。
此外,您还应该考虑头部为空的条件。
void insert_back()
{
int no;
node *temp;
cout<<"
Enter the number"<<"
";
cin>>no;
temp = head;
if(temp != NULL)
{
while(temp->next != NULL)
temp = temp->next;
temp->next = (node*)malloc(sizeof(node));
temp = temp->next;
temp->data = no;
temp->next = NULL;
}else{
head = (node*)malloc(sizeof(node));
head->data = no;
head->next = NULL;
}
}
另一答案
就在该行执行之前,temp
将为null。然后你取消引用它。
另一答案
您引用的临时值不存在,temp为NULL。要更正此问题,请使用temp-> next!= NULL,而不是在while循环条件中使用temp!= NULL。
while(temp->next!=NULL)
{
temp = temp->next;
}
Node* new_node = (Node*)malloc(sizeof(Node));
new_node->data = no;
new_node->next = NULL;
temp->next = new_node;
另一答案
while(temp != NULL)
temp = temp->next;
上面的代码将您带到列表中的最后一个节点。所以,你假设将节点添加到temp
本身而不是temp->next
。
temp = (node*)malloc(sizeof(node));
现在,最后一个节点的子节点应为NULL。
temp->next = NULL;
以上是关于C ++中链表实现中的分段错误的主要内容,如果未能解决你的问题,请参考以下文章