我正在使用Kruskal算法实现迷宫生成。除了最后一步之外,我已经完成了所有的工作,将我的成对的浮点数(vector>)转换为Vector2f(vector)的矢量。下面是我用来做这个功能:从pair到Vector2f的转换导致超出范围错误
void ConvertToVector2F(vector<std::pair<float, float>> verts, vector<Vector2f> verts2f)
{
//convert verts vector of pairs to vector of vector2f (MS stuff)
for (int i = 0; i < verts.size(); i++)
{
Vector2f newVert = { verts[i].first, verts[i].second };
verts2f.push_back(newVert);
}
}
这是从main函数调用,并转换后,从主函数返回Vector2f物体的向量。当我从主verts2f返回,它会导致一系列的错误:
“未处理的Lab1.exe在0x76EFC42D例外:微软C++ 异常:内存位置0x0025EDF8的std :: out_of_range。”
“运行时检查失败#0 - ESP的值未正确保存 跨越函数调用这通常是调用具有与一个声明的函数指针 一个调用约定声明的 函数的结果不同的召唤习惯“。
“运行时检查失败#0 - ESP的值未正确保存 跨越函数调用这通常是调用具有与一个声明的函数指针 一个调用约定声明的 函数的结果不同的召唤习惯“。
这些不会导致整个功能崩溃,但迷宫代不起作用。
当我传递vector2fs的通用向量(如{ {0,0} }
)时,不会发生错误。
我怀疑这是我如何处理矢量对象,特别是因为我提到的所有错误提到一些有关的
的std ::矢量浮点<,性病::分配器> *对象的问题。
我不知道该怎么做才能解决问题。我只知道是什么导致了这个问题。
任何人都可以解释这个问题?我正在使用Windows 7 x64机器上的Visual Studio 2013编写代码。
'verts2f'正在按值传递,因此您只是将顶点添加到本地副本。你可以显示调用这个函数的代码吗? – 2014-09-21 20:55:58