崩溃“检测到glibc:矢量双免费或腐败(外出)”

时间:2013-09-12 13:33:33

标签: c++ vector crash glibc

我正在为整数实现一个permute函数。它有运行时错误 “矢量双重免费或腐败(外出)”。

使用gdb,在逐步调用之后,它会在迭代完成后崩溃。

但我真的很难找出问题所在。

#include <vector>    

using namespace std;

class Permute {
public:  
    vector<vector<int> > vv;

    // interface      
    vector<vector<int> > permute(vector<int> &num) {
        vector<int> v(0);
        doPermute(v, num);     
        return vv;
    }

    // recursive function to permute
    void doPermute(vector<int> v, vector<int> &num) {
        if(num.empty()) {
            vv.push_back(v);          
            // on gdb, if next after the above one, it is fine, 
            // but crashes after the following next  
        } else {
            for (int i = 0; i < num.size(); i++)
            {
                int toAdd = num[i];
                vector<int> rest(num);
                rest.erase(num.begin()+i);                   
                vector<int> prefix(v);
                prefix.push_back(toAdd);
                doPermute(prefix, rest);
            }                
        }
    }        
};

int main(){
    Permute pInst;
    // sample to test with {1}
    vector<int> vt (1, 1);
    pInst.permute(vt);
}

1 个答案:

答案 0 :(得分:4)

看看这一行:

rest.erase(num.begin()+i);

尝试使用erase的正确迭代器:

rest.erase(rest.begin()+i);