C语言 链表末尾的额外元素



首先:对不起,我的英语可能不好。

我有一个学校的项目中我需要使用链表排序的数字。

这是我的结构体:

typedef struct s_lst
{
int     content;
struct s_lst    *next;
} t_lst;

这里的问题是,当我用我的整数列表初始化它时,我在最后得到了一个额外的元素,我不知道为什么。

void    stack_ini(t_lst **sa, char **nbr)
{
int i;
t_lst *tmp;
i = 0;
tmp = *sa;
while (nbr[i])
{
tmp->content = ft_atoi(nbr[i]);
tmp->next = malloc(sizeof(t_lst));
tmp = tmp->next;
i++;
}
tmp->next = NULL;
return ;
}

如果我尝试用这个函数打印列表1-2-3-4

void    print_list(t_lst *lst)
{
int i = 0;
while (lst != NULL)
{
printf("%d Element in list : %dn",i++, lst->content);
lst= lst->next;
}
return ;
}

我会得到"1-2-3- 04 ">

你们知道我做错了什么吗?

在stack_init函数中,在我的while循环结束时,我也试图将tmp设置为NULL,即使它没有意义,也会导致段错误。

我找不到这是什么额外的元素在这里做。

谢谢你的回答,再次为我的英语道歉。

你没有说明这个问题,但你似乎分配节点之前调用stack_ini

固定:

t_lst *s = NULL;         // This was wrong.
stack_ini(&s, ...);

一旦你这样做了,你就有了固定的stack_ini

void stack_ini(t_lst **prev_next_ptr, char **nbr)
{
for (; *nbr; ++nbr)
{
// Create a new node.
t_lst *node = malloc(sizeof(t_lst));
node->content = ft_atoi(*nbr);
node->next = NULL;
// Insert it into the list.
*prev_next_ptr = node;
prev_next_ptr = &( node->next );
}
}

最新更新