情況一:
代碼及調試發現的問題如下圖:

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
