与"glibc detected: vector double free or corruption (out)"崩溃

crash with "glibc detected: vector double free or corruption (out)"

本文关键字:corruption out 崩溃 or double detected glibc vector free      更新时间:2023-10-16

我正在为整数实现一个排列函数。 它的运行时错误为"矢量双重自由或损坏(出)"。

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

看看这一行:

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

尝试使用正确的迭代器进行erase

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