C++ 特征行向量超出范围会产生“;运行时检查失败“2-变量X周围的堆栈已损坏”;
我正在使用Eigen库,得到一个非常奇怪的异常: 运行时检查失败#2-变量“myVariableCopy”周围的堆栈已损坏 它来自以下代码:C++ 特征行向量超出范围会产生“;运行时检查失败“2-变量X周围的堆栈已损坏”;,c++,visual-studio,exception,eigen,C++,Visual Studio,Exception,Eigen,我正在使用Eigen库,得到一个非常奇怪的异常: 运行时检查失败#2-变量“myVariableCopy”周围的堆栈已损坏 它来自以下代码: void get_new_handle_locations() { int count = 0; for (long vi = 0; vi < V.rows(); ++vi) { if (handle_id[vi] >= 0) { Eigen::RowVector3
void get_new_handle_locations()
{
int count = 0;
for (long vi = 0; vi < V.rows(); ++vi)
{
if (handle_id[vi] >= 0)
{
Eigen::RowVector3f myVariable = V.row(vi).cast<float>();
if (handle_id[vi] == moving_handle)
{
Eigen::RowVector3f myVariableCopy = myVariable;
myVariable -= handle_centroids.row(moving_handle).cast<float>();
igl::rotate_by_quat(myVariable.data(), rotation.data(), myVariableCopy.data());
myVariable = myVariableCopy;
myVariable += handle_centroids.row(moving_handle).cast<float>();
}
handle_vertex_positions.row(count++) = myVariable.cast<double>();
}
}
} // This is where the exception is thrown
void获取新句柄位置()
{
整数计数=0;
对于(长vi=0;vi=0)
{
Eigen::RowVector3f myVariable=V.row(vi.cast();
if(句柄id[vi]==移动句柄)
{
Eigen::RowVector3f myVariableCopy=myVariable;
myVariable-=handle_centroids.row(moving_handle.cast();
igl::rotate_by_quat(myVariable.data(),rotation.data(),myVariableCopy.data());
myVariable=myVariableCopy;
myVariable+=句柄_形心.row(移动句柄).cast();
}
handle_vertex_positions.row(count++)=myVariable.cast();
}
}
}//这是引发异常的地方
在循环结束后引发异常,并且该条件在最后100次迭代中未通过,因此此时变量肯定超出范围
我用的是VS2017
我抑制了此异常,但是否有什么我应该担心的,或者它是VS错误?导致损坏的原因是
igl::rotate\u by\u quat
调用igl::quat\u mult
期望goalPositionCopy.data()
具有4个维度,但是它被声明为一个三维向量。导致损坏的原因是igl::rotate\u by\u quat
调用igl::quat\u mult
,它期望goalPositionCopy.data()
有4个维度,但是它被声明为一个三维向量。我高度怀疑这是因为你写的是handle\u vertex\u positions。row(count++)
和count
可以持续增长,超过handle\u vertex\u positions
的大小。我不认为这是Visual Studio中的一个bug。更有可能是你破坏了堆栈。好吧,我认为这是因为goalPositionCopy
是三维的,并且按四个方向旋转调用一个函数,将其用作四维。我高度怀疑这是因为你写入handle\u vertex\u positions.row(count++)
和count
只能不断增长,超过句柄顶点位置的大小。我不认为这是Visual Studio中的错误。更有可能是你破坏了堆栈。好吧,我认为这是因为goalPositionCopy
是三维的,并且逐维旋转。quat调用一个函数,将其像4维一样使用。我很高兴你得到了解决方案,感谢你的分享,如果您将其标记为答案,我将不胜感激,这将对其他社区有益。我只能在48小时后接受此答案,并且只有47个答案已通过。我很高兴您得到了您的解决方案,并感谢您的分享,如果你把它们作为答案,我将不胜感激,这将对其他社区有益。我只能在48小时后接受这个答案,只有47个通过