2次元の点集合の凸包を求めるクラスがあります。それは内部に2 Eigen::Matrix<double, 2, 1>
を持つ構造体を含んでいます。これは、(削除、多くの事で)次のようになります。このようなベクトルedges
にエッジを追加するとき固有のアラインメントされていない配列アサート
class Foo{
public:
Foo(Eigen::Matrix<double, Eigen::Dynamic, Eigen::Dynamic>);
private:
struct edge{
unsigned int a;
unsigned int b;
Eigen::Matrix<double, 2, 1> slope;
double mag;
Eigen::Matrix<double, 2, 1> normal;
std::vector<unsigned int> list;
};
Eigen::Matrix<double, Eigen::Dynamic, Eigen::Dynamic> points;
std::vector<edge> edges
};
私は、アサーションエラーを取得しています:
void Foo::DoThing(){
edges.push_back(edge());
}
正確なエラーがある:
アサーションに失敗しました:(reinterpret_cast(配列)& 0xf)== 0 & & "このアサーションはここで説明されています:" "http://eigen.tuxfamily.org/dox-devel/group__TopicUnalign edArrayAssert.html" "****このウェブページを読む!!! ****」、 \何とか\何とか\何とか\を含むファイル\固有\固有固有dc6cfdf9bcec \固有\ SRC \コア\のdensestorage.h、ライン86
私はウェブページに行き、読み次のように EIGEN_MAKE_ALIGNED_OPERATOR_NEW
私は構造体に追加:私はこのマクロを追加するために必要なこと。
struct edge{
unsigned int a;
unsigned int b;
Eigen::Matrix<double, 2, 1> slope;
double mag;
Eigen::Matrix<double, 2, 1> normal;
std::vector<unsigned int> list;
EIGEN_MAKE_ALIGNED_OPERATOR_NEW
};
しかし、エラーが続くこれは、VS 2013とし、固有のバージョン3.2.9で何が起こっている同じコード無修正作品を。 GCCバージョン5.3のLinuxでは、Eigenのベータ版がうまく動作します。この問題を引き起こすために、この新しいバージョンで何が間違っていますか?
この例では 'Eigen :: aligned_allocator'と 'Eigen :: aligned_allocator > 'の違いは何ですか?私が尋ねる理由は、両方ともエラーのないコードを生成することです。 –
Matt
異なるタイプのアロケータを使用すると、実行時に何かが発生する可能性がありますが、注意が必要です。 – SpamBot