具有固定大小的特征对象作为成员和容器的结构

时间:2013-02-20 10:25:22

标签: struct eigen lemon-graph-library

我有一个固定大小的特征对象的结构作为成员,我想用它作为柠檬的边缘图:

struct EdgeStatus
{
    Matrix<float,3,4> Data;
    …
    EIGEN_MAKE_ALIGNED_OPERATOR_NEW
};

ListGraph::EdgeMap<EdgeStatus> edgeMap(mygraph);

代码编译得很好,但是我遇到了运行时错误:

include/Eigen/src/Core/DenseStorage.h:56: Eigen::internal::plain_array<T, Size, MatrixOrArrayOptions, 16>::plain_array()
[with T = float, int Size = 12, int MatrixOrArrayOptions = 0]: Assertion `(reinterpret_cast<size_t>(array) & 0xf) == 0
&& "this assertion is explained here: " "http://eigen.tuxfamily.org/dox-devel/TopicUnalignedArrayAssert.html" " **** READ THIS WEB PAGE !!! ****"' failed.
Aborted

我该如何解决这个问题? (我已经包含了EIGEN_MAKE_ALIGNED_OPERATOR_NEW宏。)

1 个答案:

答案 0 :(得分:3)

我不知道LEMON库,但如果ListGraph :: EdgeMap允许您指定分配器,那么您必须使用我们的aligned_allocator

否则你必须放弃你的成员的矢量化,如下所示:

struct EdgeStatus
{
  Matrix<float,3,4, Eigen::DontAlign> Data;
  // ...
};