2013-06-04 2 views
1

Я использую проект, который использует библиотеку Eigen. Я должен был уже исправлена ​​проблема, при которой при использовании типов данных, предоставляемых Эйгеном в STL, я получаю сообщение об ошибке AlignИногда не удается создать объект кучи (Eigen с пользовательской структурой)

ошибка C2719: «_Val»: формальный параметр с __declspec (Align ('16')) не будет приведена в соответствие

см

Как только это было исправлено, я мог скомпилировать и запустить.

Но теперь во время выполнения я получаю другую ошибку

Debug Ошибка!

R6010

прерывание() было вызвано.

Поэтому код в вопросе ссылается моя структура и вектор моей структуры (с собственной специально выровненной FIX):

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(); 

} 

Любые идеи? Том

ответ

2

Без -DNDEBUG вы должны получить подтверждение, отправляющее вас на этот номер page. В вашем случае вы должны следовать this one. Короче говоря, добавьте EIGEN_MAKE_ALIGNED_OPERATOR_NEW к своей структуре, чтобы новый my_struct вызывал выровненный распределитель памяти.