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));

及把上面貼出來的代碼,出錯行前面兩行注釋取消注釋即可

情況二:

 

scanf輸入不加取地址符

情況3:

 

 寫數組時,pre或者cur越界

 

情況三,指針未正確賦值:

 

 本來中序+層次遍歷返回構造好的二叉樹根指針,但由於中間”=“寫成了”==“,導致未能出現賦值,遍歷的時候便出現內存訪問錯誤。

 

更新:2020-4-6

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM