我是数据结构的新手,在实现双链表时遇到了一些麻烦。在采取所有输入编译器显示分段故障(核心转储)之后。找不到错误。 我搜索了核心转储错误以及分段错误,但它没有帮助。 这是我的代码:
struct node
{
int data;
struct node *lptr,*rptr;
};
struct node *head;
void create(struct node *head)
{
struct node *newp,*ptr;
int num,n;
printf("Enter the no. of elements you want to enter :\n");
scanf("%d",&n);
printf("Enter the elements:\n");
while(n)
{
scanf("%d",&num);
n--;
if(head==NULL)
{
newp=(struct node *)malloc(sizeof(struct node));
newp->lptr=NULL;
newp->data=num;
newp->rptr=NULL;
head=newp;
printf("Head created\n");
ptr=head;
}
else
{
while(ptr->rptr)
{
ptr=ptr->rptr;
}
ptr->rptr=(struct node *)malloc(sizeof(struct node));
ptr->rptr->lptr=ptr;
ptr->data=num;
ptr->rptr->rptr=NULL;
ptr=ptr->rptr;
printf("node inserted\n");
}
}
}
void display(struct node *head)
{
struct node *ptr;
ptr=head;
while(ptr->rptr)
{
printf("%d\t",ptr->data );
ptr=ptr->rptr;
}
}
void main()
{
head=NULL;
create(head);
display(head);
}
答案 0 :(得分:-2)
head
函数在本地修改display()
变量,因此当您调用head
时,它不会指向新创建的列表。
修改create函数以返回新的头指针。这是样本变化。您需要解决的一些问题,例如,您不需要将head
参数传递给它,或者只有在创建新列表时才需要返回struct node *create(struct node *head)
{
....
return head;
}
void main()
{
head=NULL;
head = create(head);
display(head);
}
。
from docx.api import Document
from docx.enum.text import WD_BREAK
inputfile = 'test.docx'
document = Document(inputfile)
for paragraph in document.paragraphs:
# Write paragraph text into new document
# Write additional text as PARAEND_<<ParaNumber>>
答案 1 :(得分:-2)
在Main函数中,您将NULL值分配给全局变量头。 然后你传递NULL值来创建函数。 您只在create function中为内部变量头分配内存。
然后你将相同的空值传递给显示功能,在显示内部你试图访问NULL地址导致分段错误..
作为修复,你已经在主函数中分配内存并发送头(&amp; head)的传递地址来创建和显示函数
`struct node *create(struct node **head)
{
....
return head;
}
void main()
{
head=malloc(...);
head = create(&head);
display(&head);
}`
答案 2 :(得分:-2)
void create(struct node *head){}
当您在head
内更新create()
时,实际更新了已通过的副本。您需要struct node **head
,然后更新*head
。
同时,您可以避免将head
传递给create()
,因为它是全局的。
然后
ptr->rptr->lptr=ptr;
ptr->data=num;
应该是,否则你最终会更新上一个节点。
ptr->rptr->lptr=ptr;
ptr->rptr->data=num;
和display()
应该是,否则你不会打印最后一个节点。
while(ptr)
{
printf("%d\t",ptr->data );
ptr=ptr->rptr;
}