当前位置: 技术问答>linux和unix
gcc 段错误
来源: 互联网 发布时间:2016-08-12
本文导语: 双向链表的初始,插入,删除,不知道哪里有问题 //dlink.h #ifndef _DLINK_H_ 9 #define _DLINK_H_ 10 typedef int ElemType; 11 typedef struct DNode{ 12 ElemType data; 13 struct DNode *prior...
双向链表的初始,插入,删除,不知道哪里有问题
//dlink.h
#ifndef _DLINK_H_
9 #define _DLINK_H_
10 typedef int ElemType;
11 typedef struct DNode{
12 ElemType data;
13 struct DNode *prior;
14 struct DNode *next;
15 }DNode,*DLink;
16 extern DNode *New(); //初始化节点
17 extern DNode *dlink_Initial(DNode *L); //初始化L
18 extern DNode *dlink_Insert(DNode *L,int i,ElemType e); //在第i个位置插入值 // 为e的节点
19 extern DNode *dlink_Delete(DNode *L,ElemType e); // 删除值为e的节点
20 extern void dlink_Print(DNode *L); //打印出链表L
21 #endif
~
//dlink.c
#include
9 #include "dlink.h"
10
11 DNode *New()
12 {
13 DNode *p;
14 p = (DNode *)malloc(sizeof(DNode));
15 return p;
16 }
17
18 DNode *dlink_Initial(DNode *L)
19 {
20 DNode *p = New();
21 if(!p) return 0;
22 p->data = '#';
23 p->next = p;
24 p->prior = p;
25 L = p;
26 free(p);
27 return L;
28
29 }
30
DNode *dlink_Insert(DNode *L,int i,ElemType e)
32 {
33 DNode *p,*s;
34 s = New();
35 s->data = e;
36 p = L;
37 int j = 0;
38 while(j!= i)
39 { s->prior = p->prior;
40 p->prior->next = s;
41 s->next = p;
42 p->prior = s;
43
44 p = p->next;
45 j = j+1;
46 }
47 return L;
48
49
50 }
DNode *dlink_Delete(DNode *L,ElemType e)
53 {
54 DNode *p,*s ;
55 p = L->next;
56 s = p;
57 while(e != p->data)
58 { s = p;
59 p = p->next;
60 }
61 s->next = p->next;
62 p->next->prior = s;
63 return L;
64 }
65
66 void dlink_Print(DNode *L)
67 {
68 DNode *q;
69 q = L->next;
70 while(q)
71 {
72 printf("%d ->",q->data);
73 q = q->next;
74 }
printf("n");
76
77 }
|
哎!没人回答就算了,楼主还遭打击。楼主就别伤心了,从新开始学就好了。
|
运行是报段错误?
一半报这种错误,基本上都是非法访问内存,即读一个没有初始化的指针,数组越界等。
具体是代码中的哪里,再看看
|
DNode *dlink_Initial(DNode *L)
这个函数不需要free(p)
大致看了一下,不知道还有没有其他错误
|
用gdb调一下吧
段错误你gdb进去bt看一下就好了,很好找的
靠review代码找段错误,费力不讨好
段错误你gdb进去bt看一下就好了,很好找的
靠review代码找段错误,费力不讨好
|
L = p;
26 free(p);
27 return L;
L 跟p指向同一个东西,你free(p);还return L;
无语。。。。。。。。。。
26 free(p);
27 return L;
L 跟p指向同一个东西,你free(p);还return L;
无语。。。。。。。。。。