我真的不知道还有什么可说的。
我从来没有见过这种情况。而这只是让我感到困惑的原因。我想你们之前可能已经看过这个,现在我正在做些什么傻事。
关于它的注释:'temp'是函数所采用的变量。它是二叉树节点(BTN)。 temp-> d访问数据。 - > l是孩子, - > r是右孩子。 - > p是父
注意:这是家庭作业。这是一个优先考虑的问题。
注2:我看过类似的问题。所有人都提出了一个计时错误,'cout''减慢了代码的速度。什么会导致这个?我无法想到我正在做的任何真正“昂贵”的事情。
BTN<generic>* nTemp;
cout << "Sdf\n";
if(temp->r != NULL)
{
if(temp->l != NULL)
{
if(*(temp->r->d) > *(temp->l->d))
{
if(*(temp->r->d) > *(temp->d))
{
cout << "ASDfs5: " << *(temp->d) << "\n"; //THIS IS WHAT KEEPS IT FROM BREAKING / SEGFAULTING
nTemp->d = temp->d; //THIS IS WHERE IT BREAKS (SEGFAULT)
cout << "ASDfs\n";
temp->d = temp->r->d;
cout << "ASDfs4\n";
temp->r->d = nTemp->d;
cout << "ASDfs3\n";
if(temp->r != NULL)
{
checkPopValues(temp->r);
cout << "ASDfs2\n";
}
}
}
else
{
if(*(temp->l->d) > *(temp->d))
{
nTemp->d = temp->d;
temp->d = temp->l->d;
temp->l->d = nTemp->d;
checkPopValues(temp->l);
}
}
}
else
{
if(*(temp->r->d) > *(temp->d))
{
nTemp->d = temp->d;
temp->d = temp->r->d;
temp->r->d = nTemp->d;
checkPopValues(temp->r);
}
}
}
else
{
cout << "sdfs\n";
if(temp->l != NULL)
{
if(*(temp->l->d) > *(temp->d))
{
nTemp->d = temp->d;
temp->d = temp->l->d;
temp->l->d = nTemp->d;
checkPopValues(temp->l);
}
}
}
}
答案 0 :(得分:6)
您没有为nTemp
分配任何内容。它指的是垃圾。
当您在中断的行上访问它时,会发生未定义的行为。如果你很幸运,你应该获得访问冲突/段错误。如果你不幸运,它会默默地“工作”,但可能会给你错误的结果。
您需要为其指定现有BIN<Generic>
的指针或创建一个新指针。
答案 1 :(得分:0)
确保nTemp已初始化。我打赌不是。 cout会在nTemp中放置“良性”的东西。
答案 2 :(得分:0)
nTemp未分配任何空间,因此您正在写入随机存储器。