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

qq_22038241 2016-07-06 12:44:55
刚接触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 ()
将函数里的代码直接放在主函数里运行无错,想知道这到底是怎么回事,拜谢。
...全文
164 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
小灸舞 2016-07-06
  • 打赏
  • 举报
回复
你主函数内的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);
}
bierdaci 2016-07-06
  • 打赏
  • 举报
回复
楼主你看这样行不行,行的话给我2分吧,我下载个资料 typedef struct Link_node { int data; struct Link_node * next; } node_t ; node_t *Link_list = NULL; node_t *alloc_list_node(int data) { node_t *p; p = calloc(sizeof(node_t), 1); p->data = data; return p; } int main(void) { node_t *node; node = alloc_list_node(10); node->next = Link_list; Link_list = node; return 0; }
bierdaci 2016-07-06
  • 打赏
  • 举报
回复
随便回一贴能得积分么?
赵4老师 2016-07-06
  • 打赏
  • 举报
回复
眼尖是码农的基本遗传本能。 关于自己是否适合编程的很简单的测试: 在报纸或杂志上随便找一段约1000字的文章,在Word中输入一遍。输完后再参考下面答案: A里面有10处以上文字或标点错误 B里面没有文字或标点错误并敢为此跟人打赌 C里面没有文字或标点错误并且字体和排版完全与原稿一致 D打印在半透明的纸上和原稿重叠在一起检查一模一样,且自我感觉很有成就感 A不适合编程(理由:打字准确度偏低、粗心大意) B初级程序员(理由:打字准确度很高、认真细致、自信、理解全角半角概念) C高级程序员(理由:在B的基础上理解字体和排版也是电脑打印的重要因素、但相比D还不够偏执、精益求精、结果可验证) D软件项目经理(理由:能针对项目给出令人信服的细致到极点的需求说明和典型测试用例。用户几乎挑不出毛病。专业!) 如果想从A变成B的话,到我的资源http://download.csdn.net/detail/zhao4zhong1/4084259里面下载“适合程序员的键盘练习”
小灸舞 2016-07-06
  • 打赏
  • 举报
回复
引用 7 楼 icesky1stm 的回复:
[quote=引用 6 楼 qq423399099 的回复:] [quote=引用 4 楼 icesky1stm 的回复:] [quote=引用 1 楼 qq423399099 的回复:] 你主函数内的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);
}
K已经在栈中分配内存了,在*K无法改变它的地址吧。[/quote] K指针本身确实已经分配了栈内存,但是它此时指向的是位置区域(存的是垃圾值) 不知道你想说啥[/quote] 哎,我说我刚才眼花了,你会鄙视我不[/quote] 必须会
冰-天 2016-07-06
  • 打赏
  • 举报
回复
引用 6 楼 qq423399099 的回复:
[quote=引用 4 楼 icesky1stm 的回复:] [quote=引用 1 楼 qq423399099 的回复:] 你主函数内的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);
}
K已经在栈中分配内存了,在*K无法改变它的地址吧。[/quote] K指针本身确实已经分配了栈内存,但是它此时指向的是位置区域(存的是垃圾值) 不知道你想说啥[/quote] 哎,我说我刚才眼花了,你会鄙视我不
小灸舞 2016-07-06
  • 打赏
  • 举报
回复
引用 4 楼 icesky1stm 的回复:
[quote=引用 1 楼 qq423399099 的回复:] 你主函数内的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);
}
K已经在栈中分配内存了,在*K无法改变它的地址吧。[/quote] K指针本身确实已经分配了栈内存,但是它此时指向的是位置区域(存的是垃圾值) 不知道你想说啥
冰-天 2016-07-06
  • 打赏
  • 举报
回复

#include <stdio.h>                                                                                                                                                                           
#include <stdlib.h>
#include <string.h>

typedef struct Link_node
{
    int data;
    struct Link_node * next;
}node,*Link_list;

void init_Linklist(Link_list *L)
{
    Link_list p;
    p=(Link_list )malloc(sizeof(node));
    *L=p;
    p->data=0;
    p->next=NULL;
};
void main()
{
    Link_list K;
    init_Linklist(&K);
    printf("p->data[%d]\n", K->data);
}
冰-天 2016-07-06
  • 打赏
  • 举报
回复
引用 1 楼 qq423399099 的回复:
你主函数内的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);
}
K已经在栈中分配内存了,在*K无法改变它的地址吧。
冰-天 2016-07-06
  • 打赏
  • 举报
回复

typedef struct Link_node
{
        int data;
        struct Link_node * next;
}node,*Link_list;

void init_Linklist(Link_list **L)
{     
      Link_list p;
      p=(Link_list )malloc(sizeof(node));      
      *L=p;
      p->data=0;
      p->next=NULL;
};
void main()
{
   Link_list *K;
   init_Linklist(&K);
}
qq_22038241 2016-07-06
  • 打赏
  • 举报
回复
问题解决,十分感谢! 函数里不能用P=*L代替(*L)也是因为没有明确指针指向吗?

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧