C eigen ::通过上课后无法访问矩阵
C++ Eigen:: Unable to Access Matrix after Passing to Class
我试图通过参考将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()
<< "nAn" << A.col(100) << "nn";
model.testLoadMat(A);
model.testReadMat();
std::cout << "in main testMat col " << model.testMat->cols() << " row " << model.testMat->rows()
<< "ntestMatn" << model.testMat->col(100) << "nn"; //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()
<< "ntestMatn" << testMat->col(100) << "nn";
}
void model::testReadMat()
{
std::cout << "in testReadMat col " << testMat->cols() << " row " << testMat->rows()
<< "ntestMatn" << testMat->col(100) << "nn"; //fails here if A is large
}
他们仍然给出正确数量的行和列数,但我只是无法访问内部的元素。
为什么它不起作用?如何解决?否则,是否有更好的方法可以正确执行此操作?
另外,我注意到执行testLoadMat()
的时间随矩阵大小而增加。这是否意味着我正在错误地进行"通过参考"?
main
中A
的类型是Eigen::MatrixXf
或Matrix<float, Eigen::Dynamic, Eigen::Dynamic>
。您的testLoadMat
功能需要引用Eigen::Matrix<float,3,Eigen::Dynamic>
对象。由于这些类型是不同的类型,因此创建了正确类型的临时矩阵,它是对将传递给testLoadMat
的临时对象的引用。然后,testLoadMat
存储一个指向此临时矩阵的指针,当功能返回并且临时矩阵被破坏时,该矩阵无效。当您致电testReadMat
时,您将取消此无效指针,导致不确定的行为。
修复程序是更改testLoadMat
功能的参数类型以匹配您传递的类型。
相关文章:
- Eigen如何在容器循环中干净地附加矩阵
- 当在带有Eigen的C++中使用GDB时,我如何才能看到更多的大矩阵
- Eigen - matrix.transpose 会创建矩阵的副本吗?
- Eigen对修复非正定义的协方差矩阵有解吗
- 将 Eigen::MatrixXd 矩阵转换为 cgal 容器类型
- Eigen::结构中包含的矩阵被 pybind11 标记为不可写
- Eigen::将稀疏矩阵转换为行顺序或列顺序
- 如何在我自己的C 中正确使用矩阵(EIGEN库)
- eigen :: Tensor,如何从张量访问矩阵
- C eigen ::通过上课后无法访问矩阵
- 当我在Xcode上访问矩阵(openCV垫子)的位置时,为什么我会得到未定义的行为(exc_bad_access(代码=
- 从C++中传递给函数的指针向量访问矩阵
- 将 .block() 与复矩阵 eigen lib 一起使用
- 从 C++ 中的函数调用矩阵时访问矩阵中的元素
- 如何访问矩阵形式的所有变量的解值
- 访问矩阵的一列作为特征中的向量
- 特征:访问矩阵4列的速度很慢
- 在不知道类型opencv的情况下访问矩阵值
- 为什么在访问矩阵中的像素时使用不同的数据类型会得到不同的值?
- 按列访问矩阵指针