关于这个我真的不知道该说什么了。
我从来没有见过这种情况。这让我感到困惑是什么原因造成的。我想你们以前可能已经看到了这个,现在我在做什么傻事。
注意事项:'temp' 是函数接收的变量。它是一个二叉树节点 (BTN)。 temp->d 访问数据。 ->l 是左 child ,->r 是右 child 。 ->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);
}
}
}
}
最佳答案
您没有为 nTemp
分配任何内容.它指向垃圾。
当您在中断的行上访问它时,会发生未定义的行为。如果幸运的话,您应该遇到访问冲突/段错误。如果你运气不好,它会默默地“工作”,但可能会给你错误的结果。
您需要分配一个指向现有 BIN<Generic>
的指针到它或创建一个新的。
关于c++ - 当我不输出变量时代码中断;当我这样做的时候工作。什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5750005/