菜鸟linux下的c语言链表实现初始化

C语言 码拜 9年前 (2016-04-03) 1039次浏览
刚接触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 ()
将函数里的代码直接放在主函数里运行无错,想知道这到底是怎么回事,拜谢。
解决方案

40

你主函数内的K指针,指向的是未知区域,你在init_Linklist函数里直接解引用*L自然会报错
而且你主函数里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);
}

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明菜鸟linux下的c语言链表实现初始化
喜欢 (0)
[1034331897@qq.com]
分享 (0)