v라는 Eigen MatrixXd 개체가 있는데이 행렬 내용에 액세스 할 때 몇 가지 문제가 있습니다. 코드에서와 같이 콘솔에서만 내용을 인쇄하면 정상적으로 작동합니다. 나는 콘텐츠를 사용하려고하면 오류가 나타납니다 :Eigen C++ 어설 션 실패
어설 션이 실패했습니다 (행> = 0 & & 행을 < 행() & & COL> = 0 & & COL < COLS()), 기능 연산자(), /usr/local/Cellar/eigen/3.2.4/include/eigen3/Eigen/src/Core/DenseCoeffsBase.h 파일, 라인 (337)
ChosenPoint ** points = new ChosenPoint*[width];
for (int i = 0; i < width; i++)
{
points[i] = new ChosenPoint[height];
for (int j = 0; j < height; j++)
{
points[i][j].setPoint(i, j, false);
points[i][j].setNumberOfFrames(numberOfFrames);
}
}
Matrix<double, 2, 1> v = (aT * a).inverse() * aT * b;
if (v.rows() == 2 && v.cols() == 1)
{
points[x][y].setFlow(v(0,0), v(1,0), frame);
}
그리고 내 ChosenPoint 클래스 :
typedef struct point
{
double x;
double y;
bool isValid;
} point;
class ChosenPoint
{
public:
ChosenPoint()
{
}
~ChosenPoint()
{
}
void setNumberOfFrames(int numberOfFrames)
{
this->flow = new point[numberOfFrames];
for (int i = 0; i < numberOfFrames; i++)
{
point f;
f.x = 0.0;
f.y = 0.0;
this->flow[i] = f;
}
}
void setPoint(int x, int y, bool isValid)
{
this->pt.x = (double) x;
this->pt.y = (double) y;
this->pt.isValid = isValid;
}
point getPoint()
{
return this->pt;
}
point* getFlow()
{
return this->flow;
}
void setFlow(double &xFlow, double &yFlow, int &position)
{
this->flow[position].x = xFlow;
this->flow[position].y = yFlow;
}
void updateFlow(int position)
{
this->flow[position].x = 2*this->flow[position].x;
this->flow[position].y = 2*this->flow[position].y;
}
void updateFlow(double xFlow, double yFlow, int position)
{
this->flow[position].x = xFlow;
this->flow[position].y = yFlow;
}
point pt;
point *flow;
}};
문제는 아마도'points'와 관련이 있습니다 – user4759923
점 [p] .setArray (0.0,0.0) 또는 다른 어떤 double을 만들면 마찬가지로 잘 동작합니다. 그리고 오류는 아이겐 (Eigen)에서 뭔가를 가리키고 있습니다. – PamelaTabak
[MCVE]를 제공 할 수 있습니까? –