我正在处理一个我无法找到解决方案的核心转储问题。任何形式的帮助都会受到赞赏,因为我变得无望。
我认为在进行建筑功能的第二次执行时会出现错误,但我对此无关紧要。
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;
}
提前谢谢。
答案 0 :(得分:0)
您将变量v
声明为指向struct node
的指针,但不要初始化此指针。未初始化的本地(非静态)变量具有 indeterminate 值。
使用未初始化的本地(非静态)变量会导致未定义的行为,这是崩溃的常见原因。
现代编译器善于检测未初始化变量的使用,并警告它们。您可能必须启用额外警告,因此在使用例如gcc
添加标记-Wall
,您应该收到警告。