提问者:小点点

由固定大小成员引起的特征运行时断言


运行程序时,我当前正在检索以下特征断言:

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]:断言(reinterpret_cast(eigen_unaligned_array_assert_workaround_gcc47(array))&(31))==0&&“此处解释了此断言:”“http://eigen.tuxfamily.org/dox-devel/group__topicunalignedarrayassert.html”“****阅读此网页!!!****”失败。

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

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

其中在公共头文件中定义为:

  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
  };

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

使用的G++编译标志为:-march=native-funroll-loops-std=C++11-ofast-wall

不幸的是,我仍然在检索相同的运行时断言。有什么建议怎么摆脱这个吗?


共1个答案

匿名用户

这是因为不支持请求的对齐,也不使用进行分配。您需要将allocate_shared与对齐的分配器一起使用(例如,