运行此代码时出现分段错误错误。我在gdb中运行它时没有收到错误。当我<我也没有得到这个错误。 17。
void test()
{
struct node *listHead=NULL;
int i=0;
while(i<17)
addTail(&listHead,createNode(i++));
}
struct node* createNode(int i)
{
struct node *n = malloc(sizeof(*n));
n->item = i;
return n;
}
void addTail(struct node **listHead, struct node *n)
{
if(*listHead!= NULL)
{
struct node *temp = *listHead;
while(temp->next != NULL)
{
temp = temp->next;
}
temp->next = n;
} else
{
*listHead= n;
}
}
答案 0 :(得分:6)
您没有正确初始化新元素。
将n->next = NULL;
添加到createNode
功能。
答案 1 :(得分:0)
嗯,事实上你的主要内容是insertTail
但代码中有addTail
。
答案 2 :(得分:0)
你正在使用'malloc',它不会清除(填充零)它分配给它的内存空间。在你的第一种情况下(添加头部),addTail只是使新分配的节点成为列表头,完成一个很可能非空的“下一个”字段。