Eigen :: Matrix를 참조로 클래스에 전달하고 그 요소에 액세스하려고합니다.C++ Eigen :: 클래스에 전달한 후 Matrix에 액세스 할 수 없습니다
주 함수와 클래스 모두에서 다시 행렬에 액세스하려고하면 행렬 크기가 클 경우 실패하고 세그먼트 화 오류가 발생합니다. 디버거를 사용하여 행렬 값을 확인한 결과 행렬의 요소에 액세스 할 수 없음을 알았습니다. 다음은
내 코드입니다 :MAIN.CPP
Eigen::MatrixXf A = Eigen::MatrixXf::Random(3,640); //this is OK
//Eigen::MatrixXf A = Eigen::MatrixXf::Random(3,640*480); //but not this
std::cout << "in main A col " << A.cols() << " row " << A.rows()
<< "\nA\n" << A.col(100) << "\n\n";
model.testLoadMat(A);
model.testReadMat();
std::cout << "in main testMat col " << model.testMat->cols() << " row " << model.testMat->rows()
<< "\ntestMat\n" << model.testMat->col(100) << "\n\n"; //fails here if A is large
return 0;
model.h
class model
{
public:
const Eigen::Matrix<float,3,Eigen::Dynamic> *testMat;
void testLoadMat(const Eigen::Matrix<float,3,Eigen::Dynamic> &tMat);
void testReadMat();
}
model.cpp
void model::testLoadMat(const Eigen::Matrix<float,3,Eigen::Dynamic> &tMat)
{
testMat = &tMat;
std::cout << "in testLoadMat col " << testMat->cols() << " row " << testMat->rows()
<< "\ntestMat\n" << testMat->col(100) << "\n\n";
}
void model::testReadMat()
{
std::cout << "in testReadMat col " << testMat->cols() << " row " << testMat->rows()
<< "\ntestMat\n" << testMat->col(100) << "\n\n"; //fails here if A is large
}
그들은 여전히 정확한 수의 행과 열을 제공하지만 내부 요소에는 액세스 할 수 없습니다.
왜 작동하지 않으며 어떻게 해결할 수 있습니까? 그렇지 않으면이 작업을 올바르게 수행하는 더 좋은 방법이 있습니까?
또한 testLoadMat()
을 실행하는 시간이 행렬 크기와 함께 증가한다는 것을 알았습니다. 내가 "참조에 의한 전달"을 잘못하고 있음을 의미합니까?
당신의
testLoadMat
함수의 매개 변수 유형을 변경하는 것입니다? –