-1
我试图创建在C++一个简单的二叉搜索树类,但每当我打电话给我的插入功能:C++ - 函数调用的分割错误?
template<typename T>
void BSTree_Fast<T>::insert(T & key)
{
cout<<"working";
int i=0;
BSTNode<T> *newNode=new BSTNode<T>(key); //Initializing pointer to newNode with key as Key
if(maxDepth==0){ //if tree is empty, sets root to new node
root=newNode;
setMaxDepth(1);
}
BSTNode<T> *curr=root; //Traversal unit curr
if(key==curr->getKey()){ //checking if inserted key is same as root key
int n=curr->getNum();
n++;
curr->setNum(n);
delete(newNode);
}
while(key!=curr->getKey()){ //first while loop when above is not true
if(key<curr->getKey()){ //checks left if key < current key
if(curr->getLeft()==NULL){ //if cannot traverse left, creates new node to left of current
curr->setLeft(newNode);
if(i>maxDepth){
cout<<i;
setMaxDepth(i);
}
break;
}
else if(curr->getLeft()->getKey()==key){//if left child equals input key, increase number
int n=curr->getLeft()->getNum();
n++;
curr->getLeft()->setNum(n);
delete(newNode);
break;
}
else{
i++;
curr=curr->getLeft(); //traverses left
}
}
if(key>curr->getKey()){ //checks right if key > current key
if(curr->getRight()==NULL){ //if cannot traverse right, creates new node to right
curr->setRight(newNode);
if(i>maxDepth){
setMaxDepth(i);
}
break;
}
else if(curr->getRight()->getKey()==key){//if right child equals input key, increase number
int n=curr->getRight()->getNum();
n++;
curr->getRight()->setNum(n);
delete(newNode);
break;
}
else{
i++;
curr=curr->getRight(); //traverses to right
}
}
}
}
但是它打电话时似乎打了一个段错误之前的任何实际的代码可以实现它带有从文件读入的字符串。
输出可能是行缓冲。你有没有试过在函数的开头添加一个换行符 - “<< endl” - 你的日志语句?代码后面有很多地方可能导致段错误(例如,如果第一次插入时'root'为空)。您需要自己进一步调试或提供完整的可运行示例以获得更具体的帮助 – simonc 2014-10-02 16:41:49
您忘记提问了。当你按下“提问问题”按钮时,你应该会询问具体的问题。你讲了一个故事,然后停下来,让我们猜测你的实际问题是什么。它可能来自“什么是分段错误?”到“我的代码看起来是否合理?”。 – 2014-10-02 16:44:38