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;
}