CUDA编程之机器人SLAM点云视觉学习与实践0.1——各种BUG集合

这一节是记录学习过程中遇到的各种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;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值