0

我正在为整数实现一个置换函数。它有“vector double free or corruption (out)”的运行时错误。

使用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);
}
4

1 回答 1

4

看看这一行:

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

尝试使用正确的迭代器erase

rest.erase(rest.begin()+i);
于 2013-09-12T14:56:23.870 回答