这是一个简单创建链表和输出链表数据的程序
#include <stdio.h>
typedef struct ListCode
{
int data;
struct ListCode *next;
}listcode;
void creatlist(listcode *list, int n);
void printlist(listcode *list);
int main()
{
listcode *list;
int n;
printf("请输入一个非零整数");
scanf("%d", &n);
printf("请输入%d个数据", n);
creatlist(list, n);
printlist(list);
return 0;
}
void creatlist(listcode *list, int n){
listcode *head, *node, *end;
head = (listcode*)malloc(sizeof(listcode));
head = list;
end = head;
int i;
for(i = 0; i < n; i++){
scanf("%d", &node->data);
end->next = node;
end = node;
}
}
void printlist(listcode *list){
listcode *p;
p = list;
while(p){
printf("%d ",p->data );
p->next;
}
}
在运行时在第一个函数就出错不能运行了
debug的时候在creat函数的“end->next = node”这一步出现了segmentation fault
请问应该怎么解决尼
首先,本身有代码问题。
第二 能明显感觉到你的语法逻辑可能不是很实在,缺乏一些代码沉淀吧。
这里针对每一个 指针变量,你都要maloc后才能传参或者新建节点用->取赋值使用的。
所以,你应该在main函数开始的时候给头节点malloc,传参给函数,这个就是链表的头节点
然后再函数内部,每次想创建节点,都是malloc的,赋值后,加入到头节点链表中(指针变量的初始化了解一些,必须做初始化才能用,你看你函数里就没有初始化)
再就是malloc对应的释放,再不用代码的时候要用free释放掉对应的malloc