c/c++ 野指针乱访问,空指针乱访问

在按照给予的先序遍历和中序遍历,重建二叉树的时候,碰到“野指针乱访问,空指针乱访问”的问题,我手动释放vector中的内存后就能通过编译,但是我看很多人都不手动释放vector内存的啊,这是为什么呢?代码如下:
struct TreeNode* reConstructBinaryTree(vector<int> pre,vector<int> in) {
         //输入不合法
        if(pre.empty()||in.empty()||pre.size()!=in.size()){
            return NULL;
        }
        struct TreeNode *rootNode=new TreeNode(0);
        int root_val=pre[0];//取出先序的第一个元素
        pre.erase(pre.begin());//从先序中删除这一元素
        rootNode->val=root_val;
        //判断这元素在中序的什么位置
        int i=0;
        for(;i<in.size();i++){
            if(root_val==in[i]){
            break;
        }
        }
        //在中序中没找到这个数字,输入的数据有问题,直接返回
        if(i==in.size()){
            return NULL;
        }else{
            vector<int> leftInVec;//左子树-中序
            vector<int> rightInVec;//右子数-中序
            vector<int> leftPreVec;//左子树-前序
            vector<int> rightPreVec;//右子数-前序
            for(int j=0;j<i;j++){ leftInVec.push_back(in[j]); }
            for(int j=i+1;j<in.size();j++){ rightInVec.push_back(in[j]); }
            for(int j=0;j<i;j++){ leftPreVec.push_back(pre[j]); }
            for(int j=i;j<pre.size();j++){ rightPreVec.push_back(pre[j]); }
            
rootNode->left=reConstructBinaryTree(leftPreVec,leftInVec);
            rootNode->right=reConstructBinaryTree(rightPreVec,rightInVec);
            vector<int> free1;
            vector<int> free2;
            vector<int> free3;
            vector<int> free4;

            free1.swap(leftInVec);
            free2.swap(rightInVec);
            free3.swap(leftPreVec);
            free4.swap(rightPreVec);
        }
        return rootNode;
    }
全部评论
按理说,你定义的几个vector是局部变量,不需要手动适当。不过楼主这么写代码并不好,每次递归的时候都要拷贝vector,这样很容易栈溢出的。
点赞 回复 分享
发布于 2016-05-28 14:00

相关推荐

在喝茶的牛油很喜欢吃...:今天oc了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务