加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Devc++ 错误信息:Program received signal SIGSEGV, Segmentat

发布时间:2020-12-15 04:57:28 所属栏目:百科 来源:网络整理
导读:#define EQ(a,b) ((a) == (b)) #define LT(a,b) ((a) #define LQ(a,b) ((a) > (b)) typedef int ElemType; typedef struct{ ElemType key; }SElemType; typedef struct BiNode{ SElemType data; struct BiNode *lchild,*rchild; }BiNode,*BiTree; BiTree T;

#define EQ(a,b) ((a) == (b))

#define LT(a,b) ((a) < (b))

#define LQ(a,b) ((a) > (b))

typedef int ElemType;

typedef struct{

ElemType key;

}SElemType;

typedef struct BiNode{

SElemType data;

struct BiNode *lchild,*rchild;

}BiNode,*BiTree;

BiTree T;

Status CreateDST(BiTree &T,int n){

int i;

ElemType key;

for(i=1;i<=n;i++){

printf("请输入第%d个元素:",i);

scanf("%d",&key);

InseartBST(T,key);

}

return OK;

}

Status SearchBST(BiTree T,ElemType key,BiTree f,BiTree &p){

if(!T){

p=f;

return FALSE;

}

else if(EQ(key,T->data.key)){

p = T;

return TRUE;

}else if(LT(key,T->data.key)){

return SearchBST(T->lchild,key,T,p);

}else{

return SearchBST(T->rchild,p);

}

}

Status InseartBST(BiTree &T,ElemType key){

BiTree p;

if(!SearchBST(T,NULL,p)){

BiTree s;

s = (BiTree)malloc(sizeof(BiNode));

if(!s) return ERROR;

s->data.key = key;

s->lchild = s->rchild = NULL;

if(!p) T = s;

else if(LT(key,p->data.key)) p->lchild = s;

else p->rchild = s;

return TRUE;

}else return FALSE;

}

上面的信息是在我编写二叉排序树创建,查找,插入元素时产生的,产生的原因如下:

BiTree T;//首先声明一个二叉树类型的指针变量,但是变量T只是一个地址,大多数情况下不为NULL.这便是产生上述错误的主要原因(将T赋值为NULL即可)。

CreateDST(T,n); //接着,创建二叉排序树

InseartBST(T,key); //?向排序树中插入元素key

SearchBST(T,p)? //在插入元素key之前,要先查找树中是否存在与key相同的元素,不存在才会插入到树中

但是由于变量T不为空,下面本应执行的代码并没有执行:

if(!T){


?? ??? ?p=f;


?? ??? ?return FALSE;


?? ?}

而是执行下面的代码:

else if(EQ(key,T->data.key)){


?? ??? ?p = T;


?? ??? ?return TRUE;


?? ?}else if(LT(key,T->data.key)){


?? ??? ?return SearchBST(T->lchild,p);


?? ?}else{


?? ??? ?return SearchBST(T->rchild,p);


?? ?}

但是开头只是声明了变量T,并没有为其开辟空间,所以T->data.key是有问题的,最终导致了上面的问题。

故而只需把T赋值为空即可。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读