C++ C++;使用BST双重释放或损坏
所以我正在创建一个程序,它接受一个后缀表达式,并使用二叉树将其转换为中缀。我的主转换函数中不断出现双重免费或损坏错误:C++ C++;使用BST双重释放或损坏,c++,vector,tree,binary-search-tree,C++,Vector,Tree,Binary Search Tree,所以我正在创建一个程序,它接受一个后缀表达式,并使用二叉树将其转换为中缀。我的主转换函数中不断出现双重免费或损坏错误: template <typename T> bool Bet<T>::buildFromPostfix(const list<Token> & postfix) { makeEmpty(root); vector<BinaryNode*> myVector; for(auto itr = po
template <typename T>
bool Bet<T>::buildFromPostfix(const list<Token> & postfix)
{
makeEmpty(root);
vector<BinaryNode*> myVector;
for(auto itr = postfix.begin(); itr != postfix.end(); itr++)
{
if(itr->getType() == 1 || itr->getType() == 2 || itr->getType() == 3 )
{
BinaryNode *newNode = new BinaryNode();
newNode->element = itr->getValue();
myVector.push_back(newNode);
}
else
{
BinaryNode *newNode = new BinaryNode();
newNode->element = itr->getValue();
newNode->right = myVector[myVector.size() - 1];
myVector.pop_back();
newNode->left = myVector[myVector.size() - 1];
myVector.pop_back();
myVector.push_back(newNode);
}
}
if(myVector.size() != 1)
{
cout<<"Mismathcing operands and operators with: " <<myVector[0]->element.getValue() <<endl;
return false;
}
root = new BinaryNode(myVector[0]->element, myVector[0]->left,myVector[0]->right);
return true;
}
模板
bool Bet::buildFromPostfix(常量列表和后缀)
{
makeEmpty(root);
向量myVector;
对于(自动itr=postfix.begin();itr!=postfix.end();itr++)
{
如果(itr->getType()==1 | | itr->getType()==2 | | itr->getType()==3)
{
BinaryNode*newNode=newbinarynode();
newNode->element=itr->getValue();
myVector.push_back(newNode);
}
其他的
{
BinaryNode*newNode=newbinarynode();
newNode->element=itr->getValue();
newNode->right=myVector[myVector.size()-1];
myVector.pop_back();
newNode->left=myVector[myVector.size()-1];
myVector.pop_back();
myVector.push_back(newNode);
}
}
如果(myVector.size()!=1)
{
你能试着调试你的程序吗?因为有0个delete
语句,我怀疑你得到了双重自由。有可能myVector
是空的吗?这回答了你的问题吗?嗯,我试着调试了几个小时,缺少delete语句让我困惑。myVector不是空的,因为se在输出双重自由错误之前,它会打印出myVecotr[0]。