与"glibc detected: vector double free or corruption (out)"崩溃
crash with "glibc detected: 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);
}
看看这一行:
rest.erase(num.begin()+i);
尝试使用正确的迭代器进行erase
:
rest.erase(rest.begin()+i);
相关文章:
- IN, OUT, INOUT Parameters
- 即使使用调试编译标志,表达式也是"optimized out"
- C++双重释放或损坏(out)
- 将 out/in out 参数与 if/switch 的 init 语句一起使用
- 在命令行上将输入显示到数组中时如何删除 ./a.out?
- 为什么我的向量::擦除调用会抛出"vector subscript out of range"?
- 解决方案在第 25 行执行错误'out of bounds'
- C++ 向量加减抛出"expression: vector subscript out of range."错误
- 对函数的 out 字符串参数使用 swap 与赋值
- 逻辑'double free or corruption (fasttop)'错误
- 运行编译的 a.out 后出现分段错误(核心转储)错误
- 在 Metal 着色器代码中,如何定义函数的 in/out 参数变量?
- emplace_back和push_back给出错误'double free or corruption (fasttop)'尽管定义了复制和移动构造函数
- 赋值运算符上的双重释放或损坏(out)
- "in"和"out"在参数方向上是什么意思?
- 从 MSVC14 切换到 MSVC16 会导致"compiler is out of heap space (C1060)"错误
- -bash:/a.out:无法执行二进制文件:Exec格式错误
- C++ 调用析构函数后动态模板队列"double free or corruption (out)"
- 运行时错误:"*** glibc detected ***: double free or corruption (out)"
- 与"glibc detected: vector double free or corruption (out)"崩溃