C++ 带有递归的内存错误

C++ 带有递归的内存错误,c++,c++11,memory,C++,C++11,Memory,这是我的密码。程序会得到一些点坐标,并且应该枚举所有路径(将来应该更复杂,但这是本质) #包括 #包括 #包括 #包括 #包括 #包括 使用名称空间std; 结构点{ 点(){}; 点(const int&x_,const int&y_):x{x_},y{y}{; int x,y; }; 双倍距离(常数点和a、常数点和b){ 返回sqrt(pow(a.x-b.x,2)+pow(a.y-b.y,2)); } 结构路径{ 矢量点; 双倍长度; 路径(向量&p):点{p},长度{0.0}{}; 无效添

这是我的密码。程序会得到一些点坐标,并且应该枚举所有路径(将来应该更复杂,但这是本质)

#包括
#包括
#包括
#包括
#包括
#包括
使用名称空间std;
结构点{
点(){};
点(const int&x_,const int&y_):x{x_},y{y}{;
int x,y;
};
双倍距离(常数点和a、常数点和b){
返回sqrt(pow(a.x-b.x,2)+pow(a.y-b.y,2));
}
结构路径{
矢量点;
双倍长度;
路径(向量&p):点{p},长度{0.0}{};
无效添加点(点和点){
长度+=距离(p,points.back());
点。推回(p);
}
};
向量枚举路径(向量和坐标){
//假设坐标不是空的
矢量结果;
无符号整数大小=坐标.size();
如果(大小==1){
结果={新路径{坐标}};
返回结果;
}
矢量坐标;
向量递归结果;
for(无符号整数i=0;i我不能向你保证这是唯一的问题,但就在这里:

coordinates_copy.erase(coordinates.begin()+i);
您正在使用迭代器从不同的向量中删除。请将
坐标.begin()
更改为
坐标\u copy.begin()


另外,
delete
您的内存
new
;)。或者更好的是,切换到智能指针。或者甚至完全忘记指针,转而依靠
vector
的移动构造函数和返回值优化。

我不能向您保证这是唯一的问题,但就在这里:

coordinates_copy.erase(coordinates.begin()+i);
您正在使用迭代器从不同的向量中删除。请将
坐标.begin()
更改为
坐标\u copy.begin()

另外,
delete
您的内存
new
;)。或者更好地,切换到智能指针。或者甚至完全忘记指针,转而依赖
vector
的移动构造函数和返回值优化