我正在编写一个函数,它接受链表的起始指针并附加一个带有提供值的新节点。我传递的清单也可能是空的。 但是当我尝试运行该程序时,我会出现分段错误11.有人可以帮我找出我出错的地方吗?
void appendList(struct list* list, int value) {
struct list* ptr = list;
struct list* temp = (struct list*)malloc(sizeof(struct list));
temp->val = value;
temp->next=NULL;
if (ptr==NULL) {
ptr = temp;
return;
}
while ((ptr->next)!=NULL) {
ptr = ptr->next;
}
ptr->next = temp;
}
呼叫:
int main()
{
struct list* result;
result = (struct list*)malloc(sizeof(struct list));
appendList(result,4);
appendList(result,2);
appendList(result,5);
return 0;
}
答案 0 :(得分:2)
对于第一次迭代,当您调用该函数时,您的函数永远不会将列表视为空,因为您已在result
中手动创建了main
节点。因此,它的next
指针不需要,显然不是NULL
(因为您从未在NULL
中分配main
),这就是您可能崩溃的原因。
因此,要修复此崩溃,请使用以下main
-
int main()
{
struct list* result;
result = (struct list*)malloc(sizeof(struct list));
result->next=NULL;
result->val = 0;
appendList(result,4);
appendList(result,2);
appendList(result,5);
return 0;
}
您可以考虑Daniel Fischer
的评论并返回指针,这将是解决此问题的另一种方法。