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]。