【发布时间】:2018-12-05 13:56:12
【问题描述】:
当调用 printList 时,以下代码会导致分段错误。这是为什么呢?
失败的工作示例位于https://ide.geeksforgeeks.org/ZeqrQf9esb
#include <iostream>
struct Node {
int data;
Node * next;
Node * prev;
};
void addNode(struct Node **head_ref,int pos,int data)
{
struct Node*nn=new Node;
int k=0;
nn->data=data;
if(*head_ref==nullptr)
*head_ref=nn;
else
{
struct Node*temp=*head_ref;
while(k<pos)
{
temp=temp->next;
}
if(temp->next!=nullptr)
{
nn->prev=temp;
nn->next=temp->next;
temp->next=nn;
nn->next->prev=nn;
}
else
{
nn->next=nullptr;
nn->prev=temp;
temp->next=nn;
}
}
}
void printList(struct Node *Node)
{
struct Node *temp=Node;
//goto end
while(temp->next!=NULL)
{
temp=temp->next;
}
//goto start
while(temp->prev!=NULL)
{
temp = temp->prev;
}
//now print
while(temp!=NULL)
{
printf("%d ",temp->data);
temp=temp->next;
}
}
int main()
{
Node * head;
addNode(&head,0,10);
addNode(&head,0,11);
addNode(&head,0,12);
std::cerr << head->data << std::endl;
std::cerr << head->next->data << std::endl;
std::cerr << head->next->next-> data << std::endl;
printList(head);
}
【问题讨论】:
-
这段代码不能“运行” 请包括一个完整的例子,包括一个主要功能来展示你是如何使用它的。
-
理想情况下,可以将代码粘贴到wandbox.org,它会运行并演示您的错误。
-
我只包含了整个代码,包括主函数@bradgonesurfing
-
你可以从简化代码开始,从几个简单的案例开始。例如,我为您完成了wandbox.org/permlink/N5MUzCDzEuGjNJoh,这不会导致分段错误。然后建立你的测试用例,直到你发现问题。
-
非常感谢我成功运行代码,没有任何分段错误:) @bradgonesurfing
标签: c++ data-structures linked-list doubly-linked-list