我正在为整数实现一个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);
}
答案 0 :(得分:4)
看看这一行:
rest.erase(num.begin()+i);
尝试使用erase
的正确迭代器:
rest.erase(rest.begin()+i);