为什么会出现Segmentation Core dumped?我做了很多次链接列表,但不明白为什么这段代码中有一个转储
Why is there a Segmentation Core dumped? I have made linked lists many times but cannot understand why is there a dump in this code
我不明白为什么会有一个"Segmentation fault (core dumped)"...它发生在我在push函数中调用push函数的时候。
node* push(node* head, node*cur, int n)
{
if(head==NULL)
{
head=(node*)malloc(sizeof(node));
ins(n, head);
head->next=NULL;
}
else
{
cur->next=(node*)malloc(sizeof(node)); //because initially head and cur are same!
cur=cur->next;
ins(n, cur);
cur->next=NULL;
}
printf("\nPress 1 to continue insertion: ");
int ch;
scanf("%d", &ch);
if(ch==1)
{
printf("\nEnter Digit to push: ");
int dig;
scanf("%d", &dig);
push(head, cur, dig);
}
return head;
}
void disp(node* head)
{
node* cur=head;
printf("printing::: %d and %d and %p and %p\n", head->dat, cur->next->dat, head, cur);
while(cur!=NULL)
{
printf("=>");
cur=cur->next;
}
}
[简答]
您正在尝试对空指针
执行 next
操作
[长答案]
罪魁祸首似乎是 cur
指针。 Access violation exception
或 Segmentation fault
在访问无效内存时闪烁。在这里,似乎 cur 指针为空,并且 ->next
操作正在空指针上使用。
[解决方法]
if(head==NULL)
{
head=(node*)malloc(sizeof(node));
ins(n, head);
head->next=NULL;
cur=head; <---------- Add this
}
问题好像在行
cur->next=(node*)malloc(sizeof(node));
因为正如您所说的 cur 与 head 相同,所以 cur 为 NULL 并且访问 next 为 NULL 是无效的。
要治愈这个
if(head==NULL)
{
head=(node*)malloc(sizeof(node));
ins(n, head);
head->next=NULL;
cur=head; // <--change here
}
以便下一次 cur 指向 head 并且您可以访问 cur 的 next。
我不明白为什么会有一个"Segmentation fault (core dumped)"...它发生在我在push函数中调用push函数的时候。
node* push(node* head, node*cur, int n)
{
if(head==NULL)
{
head=(node*)malloc(sizeof(node));
ins(n, head);
head->next=NULL;
}
else
{
cur->next=(node*)malloc(sizeof(node)); //because initially head and cur are same!
cur=cur->next;
ins(n, cur);
cur->next=NULL;
}
printf("\nPress 1 to continue insertion: ");
int ch;
scanf("%d", &ch);
if(ch==1)
{
printf("\nEnter Digit to push: ");
int dig;
scanf("%d", &dig);
push(head, cur, dig);
}
return head;
}
void disp(node* head)
{
node* cur=head;
printf("printing::: %d and %d and %p and %p\n", head->dat, cur->next->dat, head, cur);
while(cur!=NULL)
{
printf("=>");
cur=cur->next;
}
}
[简答]
您正在尝试对空指针
next
操作
[长答案]
罪魁祸首似乎是 cur
指针。 Access violation exception
或 Segmentation fault
在访问无效内存时闪烁。在这里,似乎 cur 指针为空,并且 ->next
操作正在空指针上使用。
[解决方法]
if(head==NULL)
{
head=(node*)malloc(sizeof(node));
ins(n, head);
head->next=NULL;
cur=head; <---------- Add this
}
问题好像在行
cur->next=(node*)malloc(sizeof(node));
因为正如您所说的 cur 与 head 相同,所以 cur 为 NULL 并且访问 next 为 NULL 是无效的。
要治愈这个
if(head==NULL)
{
head=(node*)malloc(sizeof(node));
ins(n, head);
head->next=NULL;
cur=head; // <--change here
}
以便下一次 cur 指向 head 并且您可以访问 cur 的 next。