我的应用程序在不应该崩溃的时刻崩溃。还有什么 - 昨天它只是在调试模式下编译的exe或在调试器下运行时崩溃。发布版运行良好。现在它也在Release中崩溃,但代码中没有任何变化。我正在使用MSVC进行编译。当我与GCC合作时,我记得它没有崩溃(相同的代码),但是我没有编译到Debug。
代码:
std::vector<float> xVec, yVec, zVec;
for(auto& mesh : m_meshes)
{
std::pair<float, float> minMaxX, minMaxY, minMaxZ;
std::tie(minMaxX, minMaxY, minMaxZ) = mesh.getMinMaxCoords();
xVec.push_back(minMaxX.first);
xVec.push_back(minMaxX.second);
yVec.push_back(minMaxY.first);
yVec.push_back(minMaxY.second);
zVec.push_back(minMaxZ.first);
zVec.push_back(minMaxZ.second);
}
auto x = std::minmax_element(xVec.begin(), xVec.end());
auto y = std::minmax_element(yVec.begin(), yVec.end());
auto z = std::minmax_element(zVec.begin(), zVec.end());
m_size = {
*x.second - *x.first,
*y.second - *y.first,
*z.second - *z.first
};
使代码清晰:
Mesh::getMinMaxCoords
在x,y和z轴(两个方向)上找到最远的顶点,并返回足够的std::tuple
。 (我希望你明白我的意思,但这并不重要)m_size
是glm :: vec3。只是一个简单的3个花车包装。只是为了让代码清楚,但它与问题无关(我想是这样)。
std :: minmax_element在范围[first,last]中搜索,因此它不会触及.end()迭代器。向量(我的意思是竞争者 - xVec
,yVec
和zVec
)在解除引用时仍然存在,所以我不会得到可能出错的内容。为了确保我尝试在范围.begin()上调用minmax_element; (.end() - 1)以防微软在实现中出错并且函数在[first,last]中搜索但没有任何改变。
任何可能导致崩溃的想法?