c中的链接列表添加到列表的开头

问题描述 投票:0回答:1

我正在尝试创建一个简单的程序以将值添加到链表中。该代码确实编译没有错误。我在尝试执行文件时遇到分段错误。我尝试使用printf语句进行调试,但是在任何地方都没有得到任何输出。有人可以指出我做错了什么。

typedef struct位于单独的.h文件中,包括文件也位于单独的.h文件中

typedef struct      s_list
    {
        struct s_list   *next;
        void            *data;
    }                   t_list;


void    list_push_front(t_list **begin_list, void *data)
{
    t_list *l;

    l = (t_list*)malloc(sizeof(t_list));
    if(l == NULL){
        printf("No allocation");
    }
    printf("%s\n", l->data);
    l->data = data;
    l->next = *begin_list;
    *begin_list = l;
    printf("%s\n", l->data);

}

int     main(void)
{
    t_list *k;
    k = (t_list*)malloc(sizeof(t_list));
    if(k == NULL){
        printf("No allocation");
    }
    printf("allocation");
    char s[] = "Woow!";
    k->data = "Hello";
    k->next->data = NULL;
//  k->next->next->data = NULL;
    list_push_front(&k, s);
    return(0);
}

c struct linked-list undefined-behavior singly-linked-list
1个回答
0
投票

printf通话中

l = (t_list*)malloc(sizeof(t_list));
if(l == NULL){
    printf("No allocation");
}
printf("%s\n", l->data);

您正在尝试输出指针l->data指向的未初始化的存储器。因此,该函数调用未定义的行为。删除此printf的调用。这没有意义。

也在此语句中主要

k->next->data = NULL;

不正确,还会调用未定义的行为。看来您的意思是

k->next = NULL;
© www.soinside.com 2019 - 2024. All rights reserved.