1

Lemon でエッジ マップとして使用するメンバーとして、固定サイズの Eigen オブジェクトを含む構造があります。

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(マクロは既に入れています。)

4

1 に答える 1

3

LEMON ライブラリはわかりませんが、ListGraph::EdgeMap でアロケータを指定できる場合は、aligned_allocatorを使用する必要があります。

それ以外の場合は、次のようにメンバーのベクトル化をあきらめる必要があります。

struct EdgeStatus
{
  Matrix<float,3,4, Eigen::DontAlign> Data;
  // ...
};
于 2013-02-20T12:23:07.723 に答える