Eigen :: Matrixを参照によってクラスに渡し、その中の要素にアクセスしようとしています。C++ Eigen ::クラスに渡した後に行列にアクセスできない
メイン関数とクラスの両方で再度行列にアクセスしようとすると、失敗し、行列サイズが大きい場合はセグメント化エラーが発生します。私はデバッガを使って行列の値を調べ、行列の要素にアクセスできないことを発見しました。以下は
は私のコードです: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
関数のパラメータの種類を変更するのですか? –