本文介绍了段树实现..在代码中找到Bug?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
关于调试的程序在行中显示分段错误
The program on debugging shows a segmentation fault in line
if(ss==se)
{
st[indx]=a[ss];//This line...
return a[ss];
}
#include <stdio.h>
#include <conio.h>
int getmid(int a,int b){return (int)((a+b)/2);}
int* constructST(int a[],int n)
{
int x=(int)(ceil(log2(n)));
int size=2*(int)pow(2,x)-1;
int *st=(int*)malloc(size*sizeof(int));
constructUtil(a,0,n-1,st,0);
return st;
}
int constructUtil(int a[],int ss,int se,int *st,int indx)
{
if(ss==se)
{
st[indx]=a[ss];
return a[ss];
}
int mid=getmid(ss,se);
st[indx]=constructUtil(a,ss,mid,st,2*indx+1)+constructUtil(a,mid+1,se,st,2*indx+2);
return st[indx];
}
int main()
{
int a[]={1,3,5,7,9,11};
int n=sizeof(a)/sizeof(a[0]);
int *st=constructST(a,n);
/*printf("Sum of values in given range=%d",getSum(st,n,1,3));*/
getch();
}
推荐答案
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int getmid(int a,int b){return (int)((a+b)/2);}
int constructUtil(int a[],int ss,int se,int *st,int indx);
double log2(double x) { return log(x)/log(2.0);}
int* constructST(int a[],int n)
{
int x=(int)(ceil(log2(n)));
int size=2*(int)pow(2,x)-1;
int *st=(int*)malloc(size*sizeof(int));
constructUtil(a,0,n-1,st,0);
return st;
}
int constructUtil(int a[],int ss,int se,int *st,int indx)
{
int mid;
if(ss==se)
{
st[indx]=a[ss];
return a[ss];
}
mid=getmid(ss,se);
st[indx]=constructUtil(a,ss,mid,st,2*indx+1)+constructUtil(a,mid+1,se,st,2*indx+2);
return st[indx];
}
int main()
{
int a[]={1,3,5,7,9,11};
int n=sizeof(a)/sizeof(a[0]);
int *st=constructST(a,n);
getchar();
free(st);
return 0;
}
这篇关于段树实现..在代码中找到Bug?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!