问题描述
我正在尝试使用 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 (将#修改为@)