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