0

我正在编写一个函数,它采用链表的起始指针并使用提供的值附加一个新节点。我通过的列表也可能是空的。但是当我尝试运行程序时,我得到了分段错误 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;
}
4

1 回答 1

2

对于第一次迭代,当您调用该函数时,您的函数永远不会将列表视为空,因为您已resultmain. 结果,它的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的评论并返回一个指针,这将是解决此问题的另一种方式。

于 2013-05-11T21:14:33.480 回答