有时无法创建堆对象(具有自定义结构的Eigen)

时间:2013-06-04 20:34:30

标签: runtime alignment heap runtime-error eigen

我正在使用一个使用Eigen库的项目。我必须修复一个问题,当在STL中使用eigen提供的数据类型时,我得到对齐错误

  

错误C2719:'_ VAL':带__declspec的形式参数(对齐('16'))   将不会对齐

一旦修复,我就可以编译并运行。

但是现在在运行时我收到了另一个错误

  

调试错误!

     

R6010

     

已经调用了abort()。

所以有问题的代码引用了我的结构和我的结构的向量(使用特征特殊对齐的修复):

typedef struct {
    Vector4f v4;
    Matrix4f M4;
    bool b;
} my_struct;

typedef std::vector<my_struct, Eigen::aligned_allocator<my_struct>> my_struct;

然后我的代码在我尝试在一定次数的迭代后创建一个新的my_struct(它有时可以创建新对象,没有问题)之后失败,有时它失败了。

for (int i = 0; i<len; i++) {
    Vector4f vec;
    Matrix4f mat;

     my_struct* temp = new my_struct();

}

有什么想法吗? 汤姆

1 个答案:

答案 0 :(得分:2)

如果没有-DNDEBUG,你应该有一个断言发送给你page。在您的情况下,您应该关注this one。简而言之,将EIGEN_MAKE_ALIGNED_OPERATOR_NEW添加到您的结构中,以便新的my_struct调用对齐的内存分配器。