c++ - 由于固定大小的成员而导致的 Eigen 运行时断言

标签 c++ eigen eigen3

在运行我的程序时,我目前正在检索以下 Eigen 断言:

test_engine: /usr/include/eigen3/Eigen/src/Core/DenseStorage.h:128: Eigen::internal::plain_array::plain_array() [with T = double; int Size = 16; int MatrixOrArrayOptions = 0]: Assertion `(reinterpret_cast(eigen_unaligned_array_assert_workaround_gcc47(array)) & (31)) == 0 && "this assertion is explained here: " "http://eigen.tuxfamily.org/dox-devel/group__TopicUnalignedArrayAssert.html" " **** READ THIS WEB PAGE !!! ****"' failed.

导致此断言的确切代码行是:

  std::shared_ptr<Reference> ptr_tmp = std::make_shared<ReferenceLinCart>(cart_traj);

其中 ReferenceReferenceLinCart 在公共(public)头文件中定义为:

  struct Reference {
    EIGEN_MAKE_ALIGNED_OPERATOR_NEW
    virtual ~Reference() {}
  }

  struct ReferenceLinCart : Reference {
    Eigen::Transform<double, 3, Eigen::Affine> T_start;
    Eigen::Transform<double, 3, Eigen::Affine> T_goal;
    EIGEN_MAKE_ALIGNED_OPERATOR_NEW
  };

描述中的链接为我提供了有关静态大小结构成员的信息,这就是我添加 EIGEN_MAKE_ALIGNED_OPERATOR_NEW 标志的原因。

使用的 g++ 编译标志是:-march=native -funroll-loops -std=c++11 -Ofast -Wall

不幸的是,我仍在检索相同的运行时断言。关于如何摆脱这个的任何建议?

最佳答案

这是因为 make_shared 不遵守请求的对齐方式,也不使用 operator new 进行分配。您需要使用 allocate_shared使用对齐的分配器(例如,Eigen::aligned_Allocator)。

关于c++ - 由于固定大小的成员而导致的 Eigen 运行时断言,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48986131/

相关文章:

c++ - LibGit2 SSH 身份验证失败

c++ - Eigen 中两个矩阵之间的成对差异

c++ - 当内存对齐问题 (AVX) 不在最小上下文中重现时,如何调试它们?

c++ - 如何创建 Eigen::Ref vector

c++ - Eigen :张量乘法运算符的奇怪行为

c++ - 调用QSqlTableModel setTable方法时出现"Unable to find table"错误

c++ - 什么是 BOOL WINAPI 返回类型

C++ REST (Casablanca) - 读取 JSON 时失败

c++ - 从std::Vector到Eigen::Vector的数据存储错误

c++ - 使用带有 typedef 的 Rcpp 的编译错误