删除原始数据后,Eigen Map 返回部分垃圾

问题描述

我正在尝试使用 Eigen::Map 将指向原始数据的指针转换为矩阵,然后释放原始数据,但不断得到一些奇怪的结果,就好像 Eigen::Map 中的数据本身是删除。我以为 Eigen::Map 执行了深层复制,但也许这仅在您将 Eigen::Map 转换为矩阵后才会发生?

这是一些测试代码

#include <Eigen/Dense>

int main(int argc,char const *argv[])
{
    double* data = new double[4]; 
    data[0] = 1; 
    data[1] = 2; 
    data[2] = 3; 
    data[3] = 4; 

    Eigen::Map<Eigen::Matrix<double,2,Eigen::RowMajor>> M(data);
    Eigen::Matrix<double,Eigen::RowMajor> N = M.matrix();    
    std::cout << M << std::endl; 
    std::cout << N << std::endl; 
    delete[] data;  
    std::cout << M << std::endl;
    std::cout << N << std::endl; 
  
    return 0; 
} 

这对我来说是这样的:

1 2
3 4
1 2
3 4
           0 4.67506e-310
           3            4
1 2
3 4

在我的示例中,从 M 获取这种行为是不是我做错了什么?或者你应该像我一样把它转换成 N 吗?这是低效的,还是 Eigen 以某种聪明的方式处理分配 N = M.matrix() ?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)