-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