#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赋值为空即可。
总结以上是内存溢出为你收集整理的Devc++ 错误信息:Program received signal SIGSEGV, Segmentation fault.全部内容,希望文章能够帮你解决Devc++ 错误信息:Program received signal SIGSEGV, Segmentation fault.所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)