C/C++Program receive signal SIGSEGV,Segmentation fault问题

代码及调试发现的问题如下图:

 1 #include<stdio.h>
 2 #include<malloc.h>
 3 typedef struct LNode{
 4 int data;
 5 struct LNode *next;
 6 }LNode,*Linklist;
 7 
 8 void Create_Link_pos(LNode* L){ //正序插入-尾插法
 9     Linklist p,q;//p用来指示链尾,q指示新的待插入节点;
10     int len;
11     scanf("%d",&len);
12     L->data=len; //带头结点,用头节点数据域存放链表长度
13     p=L;
14     int num;
15     for(int i=1;i<=len;i++){
16         q=(LNode*)malloc(sizeof(LNode));
17         scanf("%d",&num);
18         q->data=num;
19         p->next=q;
20         p=q;
21     }
22     p->next=NULL;
23 }
24 void Create_Link_rev(LNode* L){ //逆序插入-头插法
25    
26     int len;
27     scanf("%d",&len);
28     L->data=len;//带头结点,用头节点数据域存放链表长度
29     int num;
30     for(int i=1;i<=len;i++){
31         Linklist q=(LNode*)malloc(sizeof(LNode));
32         scanf("%d",&num);
33         q->data=num;
34         q->next=L->next;
35         L->next=q;
36     }
37 }
38 
39 void Printf_Link(LNode* L){
40     Linklist p=L->next;
41     while(p!=NULL){
42         printf("%d ",p->data);
43         p=p->next;
44 }
45 printf("\n");
46 }
47 
48 
49 int main(){
50       Linklist h1,h2;
51     //h1=(LNode*)malloc(sizeof(LNode));
52     //h2=(LNode*)malloc(sizeof(LNode));
53       h1->next=NULL;
54       h2->next=NULL;
55       Create_Link_pos(h1);
56       Printf_Link(h1);
57       Create_Link_rev(h2);
58       Printf_Link(h2);
59       return 0;
60 
61 }

问题在于h1是野指针,没有开辟空间便执行了h1->next语句;

解决方法: 在出错句前面增加
h1=(LNode*)malloc(sizeof(LNode));

及把上面贴出来的代码,出错行前面两行注释取消注释即可

猜你喜欢

转载自www.cnblogs.com/debug-the-heart/p/12288906.html
今日推荐