在iMac上使用gcc进行分段故障

时间:2013-05-11 20:54:49

标签: c

我正在编写一个函数,它接受链表的起始指针并附加一个带有提供值的新节点。我传递的清单也可能是空的。 但是当我尝试运行该程序时,我会出现分段错误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;
}

1 个答案:

答案 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的评论并返回指针,这将是解决此问题的另一种方法。