KdTree C 实现导致核心转储

KdTree C implementation resulting in core dump

我正在处理无法找到解决方案的核心转储问题。任何形式的帮助将不胜感激,因为我变得绝望了。

我假设在第二次执行构建函数时出现错误,但我不知道有什么大惊小怪的。

http://pastebin.com/XwW33VY8

struct node *BuildKdTree(struct point *S, int d, int n)
{
    struct node *v;

    if(n==1)
    {
        v->l.x=S[0].x;
        v->l.y=S[0].y;
    }
    else
    {
        int i, n1, n2;
        float mE, mV;
        struct point *S1, *S2;

        S1=(struct point*)malloc(sizeof(struct point)*(n));
        S2=(struct point*)malloc(sizeof(struct point)*(n));

        if(d%2 == 0)
        {
            bubbleSortX(S, n);
            mV=medianValueX(S, n);
            v->l.x=mV;
            mE=medianElement(n);

            for(n1=0;n1<(int)mE;n1++)
            {
                S1[n1]=S[n1];
            }

            for(n2=0, i=(int)mE;i<n;n2++, i++)
            {
                S2[n2]=S[i];
            }
        }
        else
        {
            bubbleSortY(S, n);
            mV=medianValueY(S, n);
            v->l.y=mV;
            mE=medianElement(n);

            for(n1=0;n1<(int)mE;n1++)
            {
                S1[n1]=S[n1];
            }

            for(n2=0, i=(int)mE;i<n;n2++, i++)
            {
                S2[n2]=S[i];
            }
        }

        v->leftChild=BuildKdTree(S1, d+1, n1);
        v->rightChild=BuildKdTree(S2, d+1, n2); 
    }

    return v;
}

提前谢谢你。

您将变量 v 声明为指向 struct node 的指针,但您没有初始化此指针。未初始化的局部(非静态)变量具有 不确定 值。

使用未初始化的本地(非静态)变量会导致未定义的行为,这是导致崩溃的常见原因。

现代编译器擅长检测未初始化变量的使用,并发出警告。不过,您可能必须启用额外的警告,因此在使用例如gcc 添加标志 -Wall 并且您应该收到有关此的警告。