C分段故障链表

C分段故障链表,c,segmentation-fault,C,Segmentation Fault,对于学校,我必须实现一个链接列表的pop函数。但是当我运行它的时候,我得到了一个分割错误,我不知道为什么。。。我已经调试过了,它指向*value=current->next; 我对C很陌生,所以如果这是一个愚蠢的问题,我很抱歉 注意:除了pop,我还需要实现更多的功能。因此,您在这里看到的每一个其他函数调用都已经实现并正常工作 清单h 清单c 提前谢谢,如果有人能告诉我这个pop函数是否正确,那将是非常酷的:) 在while循环结束时,current为NULL 您希望在存在下一个元素时进行迭代。

对于学校,我必须实现一个链接列表的pop函数。但是当我运行它的时候,我得到了一个分割错误,我不知道为什么。。。我已经调试过了,它指向*value=current->next; 我对C很陌生,所以如果这是一个愚蠢的问题,我很抱歉

注意:除了pop,我还需要实现更多的功能。因此,您在这里看到的每一个其他函数调用都已经实现并正常工作

清单h

清单c

提前谢谢,如果有人能告诉我这个pop函数是否正确,那将是非常酷的:)

在while循环结束时,current为NULL

您希望在存在下一个元素时进行迭代。 因此,您应该将其替换为

while (current->next != NULL)
在while循环结束时,current为NULL

您希望在存在下一个元素时进行迭代。 因此,您应该将其替换为

while (current->next != NULL)
因此,当
current
为空时,该while循环将终止。精彩的!接下来会发生什么

*value = current->value;
现在电流为零。取消对空指针的引用将使调试器非常伤心

因此,当
current
为空时,该while循环将终止。精彩的!接下来会发生什么

*value = current->value;

现在电流为零。取消对空指针的引用将使调试器非常悲伤。

对于初学者,该行前面的while循环只有在
current==NULL
时才会终止。这意味着
current
在该行保证为
NULL
。这意味着您可能不应该取消对它的引用。此行:while(current!=NULL)表示current已经超过列表的末尾。但是,previous指向列表中的最后一个条目。因此,首先使用previous,该行前面的while循环仅在
current==NULL
时终止。这意味着
current
在该行保证为
NULL
。这意味着您可能不应该取消对它的引用。此行:while(current!=NULL)表示current已经超过列表的末尾。但是,previous指向列表中的最后一个条目。所以,使用前面的
while (current != NULL)
*value = current->value;