我正在尝试创建一个简单的程序以将值添加到链表中。该代码确实编译没有错误。我在尝试执行文件时遇到分段错误。我尝试使用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);
}
在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;