本文介绍了段树实现..在代码中找到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(&quot;Sum of values in given range=%d&quot;,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?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

09-12 08:02