刚接触linux不久,今天想要用linux写个小程序,结果在初始化函数这一步怎么也过不去,请教程序哪里有问题
typedef struct Link_node
{
int data;
struct Link_node * next;
}node,*Link_list;
void init_Linklist(Link_list *L)
{
Link_list p;
p=*L;
p=(Link_list )malloc(sizeof(node));
p->data=0;
p->next=NULL;
};
void main()
{
Link_list *K;
init_Linklist(K);
}
编译之后运行显示段错误,gdb检查问题出在init函数的“p=*L”,
Program received signal SIGSEGV, Segmentation fault.
0x000000000040061d in init_Linklist ()
将函数里的代码直接放在主函数里运行无错,想知道这到底是怎么回事,拜谢。
typedef struct Link_node
{
int data;
struct Link_node * next;
}node,*Link_list;
void init_Linklist(Link_list *L)
{
Link_list p;
p=*L;
p=(Link_list )malloc(sizeof(node));
p->data=0;
p->next=NULL;
};
void main()
{
Link_list *K;
init_Linklist(K);
}
编译之后运行显示段错误,gdb检查问题出在init函数的“p=*L”,
Program received signal SIGSEGV, Segmentation fault.
0x000000000040061d in init_Linklist ()
将函数里的代码直接放在主函数里运行无错,想知道这到底是怎么回事,拜谢。
解决方案
40
你主函数内的K指针,指向的是未知区域,你在init_Linklist函数里直接解引用*L自然会报错
而且你主函数里Link_list *K;这样用意味着K是二级指针,也不对,写成下面这样就可以了:
而且你主函数里Link_list *K;这样用意味着K是二级指针,也不对,写成下面这样就可以了:
typedef struct Link_node { int data; struct Link_node * next; }node,*Link_list; void init_Linklist(Link_list *L) { *L = (Link_list )malloc(sizeof(node)); (*L)->data=0; (*L)->next=NULL; } void main() { Link_list K; init_Linklist(&K); }