首先:对不起,我的英语可能不好。
我有一个学校的项目中我需要使用链表排序的数字。
这是我的结构体:
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 );
}
}