C++ 特征行向量超出范围会产生“;运行时检查失败“2-变量X周围的堆栈已损坏”;

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

我正在使用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::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个通过