这一节是记录学习过程中遇到的各种BUG
1、Eigen运行错误
/usr/include/eigen3/Eigen/src/Core/DenseStorage.h:128: Eigen::internal::plain_array<T, Size, MatrixOrArrayOptions, 32>::plain_array() [with T = float; int Size = 16; int MatrixOrArrayOptions = 0]: Assertion (internal::UIntPtr(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.
已放弃 (核心已转储)
上网百度后发现是因为:
Eigen库为了使用SSE加速,所以内存分配上使用了128位的指针,但实际分配的可能时64位或32位。
出现这个问题有四种情况,这里是因为Eigen与STL容器一起使用的时候,出现了内存分配冲突的问题。
解决办法:
将
std::vector<Eigen::Affine3f> vtransforms;
改成
std::vector<Eigen::Affine3f, Eigen::aligned_allocator<Eigen::Affine3f> > vtransforms;
同时把其他与该变量相关的声明都改了,然后再添加头文件:
#include <Eigen/StdVector>
完美解决
后面又遇到这个坑爹的问题了:
typedef struct particle_state
{
Eigen::Affine3f matrix;
float overlap;
}particle_state_t;
typedef struct particle
{
bool isOverlapOK;
float W;
float nW;
std::vector<particle_state_t> v_particle_states;
}particle_t;
改成
typedef struct particle_state
{
Eigen::Affine3f matrix;
float overlap;
}particle_state_t;
typedef struct particle
{
bool isOverlapOK;
float W;
float nW;
std::vector<particle_state_t, Eigen::aligned_allocator<particle_state_t> > v_particle_states;
}particle_t;