gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 05:04:15 25 4
gpt4 key购买 nike

在运行我的程序时,我目前正在检索以下 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com